当前位置: 首页 > web >正文

QT文本框(QTextEdit)设置内容只可复制粘贴

一、背景

        今天记录一下在qt开发过程中文本框编辑模式的知识。在创建了一个窗口使用QTextEdit控件的时候,因为我的设计需求,要求在使用过程中,文本框里面的数据可被复制粘贴,但是不能被覆盖、删除、以及拖动位置

        实现设计:添加事件过滤器,选择过滤控件中的对应按键操作,从而实现该目的。

 二、实现效果

        通过编写事件过滤器,为textEdit控件添加上事件过滤器,从而实现不可删除剪切的目的。实现效果如图:为添加对比,本次设计创建的两个textEdit,但只为左边的控件添加了事件过滤器。

三、项目代码

        1、mainwindow.h文件

// 在窗口类头文件中添加
#include <QTextEdit>
#include <QKeyEvent>class MainWindow : public QMainWindow {Q_OBJECT
public:explicit MainWindow(QWidget *parent = nullptr);protected:bool eventFilter(QObject *watched, QEvent *event) override;private:Ui::MainWindow *ui;  // Designer生成的UI指针
};// 在.cpp文件中实现
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) 
{ui->setupUi(this);// 关键:为textEdit安装事件过滤器ui->textEdit->installEventFilter(this);ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu); // 允许自定义右键菜单// 连接右键菜单信号connect(ui->textEdit, &QTextEdit::customContextMenuRequested,this, &MainWindow::onCustomContextMenu);
}

        2、mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 关键:为textEdit安装事件过滤器ui->textEdit->installEventFilter(this);ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu); // 允许自定义右键菜单
}MainWindow::~MainWindow()
{delete ui;
}
// 事件过滤逻辑
bool MainWindow::eventFilter(QObject *watched, QEvent *event) {//监听ui界面的textEdit事件,是否发生键盘按键按下的情况if (watched == ui->textEdit && event->type() == QEvent::KeyPress) {//定义按键事件指针QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);// 允许复制(Ctrl+C)和粘贴(Ctrl+V)if (keyEvent->matches(QKeySequence::Copy) || keyEvent->matches(QKeySequence::Paste))//如果是复制或者粘贴选项返回过滤器事件{return QMainWindow::eventFilter(watched, event);}// 拦截 删除、剪切、空格操作if (keyEvent->key() == Qt::Key_Delete ||  //删除操作keyEvent->key() == Qt::Key_Space ||   //空格操作keyEvent->key() == Qt::Key_Backspace ||  //回退操作keyEvent->matches(QKeySequence::Cut))    //剪切操作{return true; // 阻止事件}}return QMainWindow::eventFilter(watched, event);
}

http://www.xdnf.cn/news/2076.html

相关文章:

  • C++:继承机制详解
  • Cursor 配置 MCP Tool
  • 写在后面的话
  • yolo常用操作(长话短说)热力图,特征图,结构图,训练,测试,预测
  • 打开Qt应用程序以控制台
  • Linux基础篇、第四章_02磁盘及分区管理fdisk 和 gdisk
  • 厚铜PCB打样全流程解析:从文件审核到可靠性测试的关键步骤
  • Python的库
  • Hbase集群管理与实践
  • C语言——字串处理
  • 什么是快应用
  • STM32 I2C总线通信协议
  • 遥感金融风险监管:技术革新与实践探索
  • Java—— 常见API介绍 第五期
  • cursor 提示词和规则
  • 基于SpringBoot+Vue实现停车场管理系统
  • sync.Cond条件变量:使用场景与范例
  • Centos 7 ssh连接速度慢(耗时秒+)
  • LWIP中两种重要的数据结构pbuf和pcb详细介绍
  • 【大模型学习】Qwen-2.5-VL制作gradio前端demo页面
  • (九)深入了解AVFoundation-采集:拍照 摄像头切换、拍照参数和照片数据EXIF 信息
  • Pandas 数据处理:长格式到宽格式的全面指南
  • 文章记单词 | 第41篇(六级)
  • Vue3文件上传组件实战:打造高效的Element Plus上传解决方案,可以对文件进行删除,查看,下载功能。
  • 代码随想录算法训练营第五十八天 | 1.拓扑排序精讲 2.dijkstra(朴素版)精讲 卡码网117.网站构建 卡码网47.参加科学大会
  • 【基于Qt的QQ音乐播放器开发实战:从0到1打造全功能音乐播放应用】
  • 银行卡归属地查询的快速入门:API接口性能与安全兼备的高效实现
  • 文章记单词 | 第42篇(六级)
  • Integer[]::new方法引用
  • NLP系列【自然语言处理的深度学习模型综述】