PyQt4在TextEdit控件中创建右键菜单

今天开发界面遇到一个问题,想将textedit的显示内容及时清空,但是由于系统自带的菜单没有清空功能,就需要自己添加该部分内容。

查了很多资料:

大致分为两种方法:

1.一种是修改父窗口Widget的menu方法,添加整体的右键菜单,然后继承父类;通过捕捉右击鼠标的动作设定响应函数。

2.第二种是重写子类的右键菜单,但是需要设定两个参数:

self.textBrowser.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
 self.textBrowser.customContextMenuRequested.connect(self.showTextContextMe)

CustomContextMenu:保持通用菜单设置;

customContextMenuRequested:当有右击鼠标的动作时,弹出菜单,

showTextContextMe:显示位置函数


实际编程中,存在矛盾,如果完全继承父类菜单,修改子类菜单时需要重新设定父类菜单的功能,实现起来比较繁琐;

但是菜单内容可以自己设置。


编写位置显示函数时遇到以下效果区别:

方法一:

      #将菜单在当前位置显示       
#        self.TextContextMenu.move(QtGui.QCursor.pos()) 
#        self.TextContextMenu.show()  
     方法二:
        #在当前坐标下显示,但是菜单停止不走动
        self.TextContextMenu.exec_(QtGui.QCursor.pos())        
        
        #将菜单在右上方显示
#        self.TextContextMenu.move(self.pos() + pos)  


以下是参考的内容,转载过来作为标记:

转自:http://blog.csdn.net/yuanzhangmei1/article/details/7724077



最近在看C++ GUI  Qt4部分其中有个例子对于扩展一个应用程序提供一个上下文菜单,其中该程序只是定义一个变量来实现其中用到了一个函数(下文会给予解答)。但是更高级的是重新定义事件处理函数void contextMenuEvent(QContextMenuEvent *event)。下面讲解其contextMenuEvent(QContextMenuEvent *event)。

 

QWidget及其子类都可有右键菜单,因为QWidget有以下两个与右键菜单有关的函数:

Qt::ContextMenuPolicy contextMenuPolicy () const

void setContextMenuPolicy ( Qt::ContextMenuPolicy policy )

Qt::ContextMenuPolicy枚举类型包括:Qt::DefaultContextMenu, Qt::NoContextMenu, Qt::PreventContextMenu, Qt::ActionsContextMenu, and Qt::CustomContextMenu。

使用方式如下:

1)默认是Qt::DefaultContextMenu。
它是利用右键菜单事件contextMenuEvent()来处理(which means the contextMenuEvent() handler is called)。就是要重写contextMenuEvent( QContextMenuEvent * event )函数。

例子(该例子即是我改写的)

  1. <span style="font-size:18px;">void MainWindow::contextMenuEvent(QContextMenuEvent *event)  
  2. {  
  3.   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值