要实现这个功能并不是很简单,因为QGraphicsTextItem的mousePressEvent和mouseDoubleClickEvent和其他类并不是很一样,重载senceEvent(QEvent*)也不太好使,下面介绍要实现的功能和实现方法
实现的功能如下
文本属性利用document()设置,请见上一篇文章
双击左键进入编辑状态,并选择当前的文字
此时可以利用左键选择文本以及编辑操作,右键保留剪切复制等操作
回车键离开焦点,离开焦点时,做编辑成功处理,发射信号给父对象以做其他处理
鼠标右键触发的离开焦点做取消操作处理,恢复之前编辑的文本
右键菜单也会触发离开焦点这里直接进入父类的离开焦点事件,需要注意
其他离开焦点的事件,也做编辑成功的处理,发射信号给父对象
下面贴上代码

注意进入父类QGraphicsTextItem的mousePressEvent后mouseDoubleClickEvent就不会响应了,想进入双击事件那么就不执行QGraphicsTextItem::mousePressEvent(),具体原因不知道,这里要注意

private:QString m_store_str;//用于保存
signals:void mySignal(QString);void focusInEvent(QFocusEvent *event) override{if(event->reason() != Qt::PopupFocusReason){//注意右键菜单再次进入焦点时不保存原始文本m_store_str = toPlainText();//保存原始文本}QGraphicsTextItem::focusInEvent(event);}void focusOutEvent(QFocusEvent *event) override{if(event->reason() == Qt::MouseFocusReason && QApplication::mouseButtons()==Qt::RightButton){//右键点击其他地方失去焦点,定义为取消操作,恢复原始文本setPlainText(m_store_str);setTextInteractionFlags(Qt::NoTextInteraction);//恢复不能编辑状态}else if(event->reason() == Qt::PopupFocusReason){//右键弹出菜单时不做处理}else{//其他情况,包括下面点击回车的情况,编辑成功,发送信号给父对象setTextInteractionFlags(Qt::NoTextInteraction);emit mySignal(toPlainText());}QGraphicsTextItem::focusOutEvent(event);}void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)override{if(event->button() == Qt::LeftButton){//左键双击进入可编辑状态并打开焦点setTextInteractionFlags(Qt::TextEditorInteraction);setFocus();QGraphicsTextItem::mouseDoubleClickEvent(event);}}void mousePressEvent(QGraphicsSceneMouseEvent *event)override{if(event->button()==Qt::LeftButton){//左键点击是可编辑状态的话响应单击事件if(textInteractionFlags() != Qt::NoTextInteraction){QGraphicsTextItem::mousePressEvent(event);}//是不可编辑状态的话,也就是未双击进入编辑状态时不响应,一遍产生双击事件}else{//其他按键正常流程        QGraphicsTextItem::mousePressEvent(event);}}void keyPressEvent(QKeyEvent *event) override{if(event->key() == Qt::Key_Return||event->key() == Qt::Key_Enter){//点击回车失去焦点,编辑完成,后续给FocusOutEvent处理clearFocus();}else{QGraphicsTextItem::keyPressEvent(event);}}

Qt QGraphicsTextItem 实现双击进入编辑状态相关推荐

  1. QT应用编程: QGraphicsTextItem单击选中、双击进入编辑状态

    一.环境介绍 操作系统介绍:win10 64位 QT版本: 5.12.6 二.功能介绍 最近做一个播放器的项目,需要用户自定义编辑定制视频的字幕:为了方便编辑字幕,这里QGraphicsTextIte ...

  2. Qt LineEdit设置为不可编辑状态:

    QLineEdit *lEdit = new QLineEdit(): lEdi -> setReadOnly(true); //只读 或者 lEdi ->setEnabled(False ...

  3. Qt实现双击可编辑的QLabel,输入文本后回车确定

    功能 环境:VS2013 + Qt5.8 在一个QLabel标签上,双击,对文本进行编辑,按下回车或者Esc,退出编辑状态,或者任意点击其他地方,退出Focus,退出编辑状态 Demo下载:https ...

  4. java文本框双击可编辑_JS实现双击内容变为可编辑状态

    在一些网站上我们经常看到交互性很强的功能.一些用户资料可以直接双击出现文本框,并在此输入新的资料即可修改,无需再按确定按钮等.. 我在网上查了很多资料,但都有一个小bug,就是当获取焦点后,光标的位置 ...

  5. html双击变成可编辑状态,JS实现双击编辑可修改状态的方法

    本文实例讲述了JS实现双击编辑可修改状态的方法.分享给大家供大家参考.具体如下: 这是现在流行的一个表单特效,在网页上单击某文字,文字变为编辑状态,或者是让输入新文字,这就是JavaScript控制表 ...

  6. Qt Creator在设计模式下编辑3D资产

    Qt Creator在设计模式下编辑3D资产 在设计模式下编辑3D资产 在设计模式下编辑3D资产 Qt Design Studio将在设计模式下打开包含3D场景和3D编辑器中的场景的QML文件.您可以 ...

  7. vue结合百度地图绘制工具遇到的问题及解决方案(多边形编辑状态下形状显示不全、marker点添加事件无效)

    vue如何引入百度地图绘制工具 百度地图绘制工具示例 http://developer.baidu.com/map/jsdemo.htm#f0_7 百度地图绘制工具api文档 http://api.m ...

  8. dateTimePicker编辑状态下,取值不正确的问题

    当对dateTimePicker进行编辑,回车,调用函数处理dateTimePicker的value值时,其取值结果是你编辑之前的值,而不是你编辑后的值,虽然dateTimePicker.text的值 ...

  9. 如果在CSDN博文编辑状态下获得博文最终网络链接?

    ■ 简介 为了便于编辑多个相互之间有交叉引用的博文,需要能够在CSND博文编辑状态下就能够获得各个博文最后引用的链接.这种方式适合于: 将一个大型的博文拆解成很多小的博文: 在博文之间能够相互进行索引 ...

最新文章

  1. 每日一条linux (1) -find
  2. 华为服务器bios配置性能,高级电源管理配置 - 华为服务器 Brickland平台 BIOS 参数参考 30 - 华为...
  3. ubuntu squid 做http代理
  4. python 关于字节串和字符串
  5. git 修改分支名字_基础Git操作与GitHub协作吐血整理,收好!| 原力计划
  6. 物理服务器向虚拟化无缝对接,服务器虚拟化下的网络变迁
  7. 协议 - 收藏集 - 掘金
  8. 图像处理三:图像变形forward warping和inverse warping
  9. MySQL配置文件详解
  10. 思岚A3雷达官方ROS包将雷达的发布频率改为20HZ
  11. mysql数据库拒绝访问的解决过程_记一次MySQL数据库拒绝访问的解决过程
  12. html5跳动的心电图,jquery制作心电图跳动特效
  13. 抓取淘宝司法拍卖数据
  14. Debian 12 Bookworm 尝鲜记
  15. 通过出生日期计算年龄
  16. 畅购商城(五):Elasticsearch实现商品搜索
  17. es6-generator抽奖
  18. 信息学奥赛一本通1004
  19. 主机ip地址数量的计算
  20. 跳板机的基本原理,以及实现思路!

热门文章

  1. python.exe-找不到序数:无法定位序数242与动态链接库libiomp5md.dll上。
  2. 什么是裸金属服务器?裸金属服务器架构原理详解
  3. Spark SQL too many elements for tuple: 25 (scala tuple超过默认22个元素)
  4. linux 进阶命令笔记(12月26日)
  5. 快捷键及Dos命令学习总结
  6. 10套极好用的PS笔刷工具,简直就是神器
  7. 信号完整性分析学习--18--源端匹配
  8. NetBeans使用Consolas中文乱码的解决
  9. 【极简版GH60】【GH60剖析】【八】增加一键输入密码(邮箱)功能
  10. python 串口测试,基于python串口通信简单实现物联网设备的自动化测试