今天开发界面遇到一个问题,想将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 )函数。
例子(该例子即是我改写的)
- <span style="font-size:18px;">void MainWindow::contextMenuEvent(QContextMenuEvent *event)
- {