蛋疼的QTextEdit删除/右键菜单

    2017年3月11日修改:
        QTextEdit的删除功能,可以用editer->document()->removeSelectedText()来实现 

       对于QT编程。QTextEdit是一个很普通的类,这个类提供了基本的文本编辑,对于一般的文本编辑,这个类提供了一系列槽和函数来实现诸如复制,剪切,undo,redo等操作,但缺有2个灰常蛋疼的地方 蛋疼的QTextEdit删除/右键菜单 - jxf2008 - 为了梦想而奋斗~
  首先 :删除/delete
  对于这样一个很基本的文本操作,QTextEdit缺没有提供对应的槽或者函数(也许有,但我确实没找到。。),翻遍了各种文档,Qt确实有这样一个函数removeSelectedText()来提供删除功能,这个是 QTextContrl类的函数,如果查询QTextEdit的头文件的源代码就可以找到这个QTextContrl类,他是QTextEdit的一个友元类。。
  对于一个QTextEdit来说,如果直接右键弹出右键菜单,上面确实有有delete这个选项,但我实在不知道这个是怎么实现的,所以为了实现删除功能,我采用了一个比较近似的办法,子类化QTextEdit,然后添加一个槽
void deleteSelected()
{
   moveCursor(QTextCursor::PreviousCharacter,QTxetCursor::KeepAnchor);
   cut();
   setFocus();
}
说明 第一个函数是移动光标到前一个位置同时选中光标移动过程中经过的文字(函数的参数是2个枚举,含义可以查询文档),当用鼠标拖动光标移动,假如从位置A滑动到B,这样就选中了从A到B之间的文字,然后这个函数的作用就是让光标从B位置回到A位置,同时仍然保持A到B之间的文字被选中

第二个函数就是剪切掉(A到B位置之间的文字)(这会带来一定负作用,下述 蛋疼的QTextEdit删除/右键菜单 - jxf2008 - 为了梦想而奋斗~

第三个设置焦点

通过这三个函数的相互作用就可以近似的实现删除功能,为什么说近似呢,就是第二个函数cut(),用他“删除”的文字会进入剪切板。。。
以windows自带的记事本为例,操作 :网页复制一段文字==>删除记事本原有的文字==>粘贴
此时出现在记事本上的文字是从网页上复制下来的内容

子类化的QTextEdit执行相同的操作 : 网页复制一段文字==>删除记事本原有的文字==>粘贴
这时候出现在编辑框里的是 刚被删除的原有的文字。。。
~~~~~~华丽的分割线~~~~~~
然后是QTextEdit的另一个问题,上面说到的右键菜单是英文的,但很神奇的是这个右键菜单我无法通过加载.qm文件来翻译(当然也许是我的方法不对),所以我最后只能通过重新实现右键菜单来达到翻译的功能
PS:另一个主要的问题是,默认的右键菜单不一定能实现程序要求的功能
void contextMenu(QContextMent* event)
{
  menus->exec(Qcursor::pos());  //这里的menus菜单程序具体根据需要在构造函数里实现
  event->accept();
}
   
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值