![]() |
![]() |
很重要--转载声明
- 本站文章无特别说明,皆为原创,版权全部,转载时请用连接的方式,给出原文出处。同时写上原做者:朝十晚八 or Twowords
- 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时经过修改本文达到有利于转载者的目的。
QLineEdit是单行文本框,不一样于QTextEdit,他只能显示一行文本,一般能够用做用户名、密码和搜索框等。它还提供了一些列的信号和槽,方便咱们使用,有兴趣的小伙伴能够直接去看帮助文档,我在这里就很少废话了。可是呢,我在这里却要单独的说几个接口,由于他们很容易被人忽略,可是却又是一个很好用、能够常常用到的功能。html
图1 addAction使用截图函数
如图1所示,是addAction使用截图,右侧按钮图标是我使用style()->standardPixmap(QStyle::SP_TitleBarMinButton)添加的,post
本文描述的3种右键菜单定制,也一样适用于其余继承自QWidget的类。url
首先咱们看下图2所示,这是qt帮助文档中的一个枚举,这个枚举对于制做右键菜单有相当重要的做用,相信大多数的小伙伴确定都见过,也都明白是什么意思。spa
图2 ContextMenuPolicy枚举code
其实qt的命名仍是比较合理的,从英文单词上咱们大概就能知道这个宏的做用,下面我来一次说下这个几个宏的含义。一、没有右键菜单;二、组织右键菜单弹出,不一样于第一个,该宏还阻止事件传递给父窗口;三、缺省的值,右键菜单在窗口类的contextMenuEvent函数中处理;四、使用窗口的action来弹出菜单,这个对于table和tree来讲比较方便;五、右键事件在customContextMenuRequested对应的槽函数中实现,固然了槽须要咱们本身写。htm
方法1:blog
实现customContextMenuRequested信号的接口,并调用setContextMenuPolicy设置Qt::CustomContextMenu参数,使用connect连接,具体示例我就不写了。继承
方法2:接口
设置contextMenuPolicy为Qt::DefaultContextMenu,这个也是默认值,而后实现QWidget类的contextMenuEvent接口,示例代码以下:
1 void MyTextEdit::contextMenuEvent(QContextMenuEvent *event) 2 { 3 QMenu *menu = createStandardContextMenu();//默认的标准右键菜单,若是不须要刻意彻底本身实现 4 menu->addAction(tr("My Menu Item")); 5 //... 6 menu->exec(event->globalPos()); 7 delete menu; 8 }
方法3:
重写父类的mousePressEvent函数,处理鼠标右键事件,示例代码相似于:
1 void DragList::mousePressEvent(QMouseEvent *event) 2 { 3 if (event->button() == Qt::LeftButton) 4 { 5 startPos = event->pos(); 6 dragItem = itemAt(event->pos()); 7 } 8 QListWidget::mousePressEvent(event); 9 }
上面的代码我只为了说明问题,没有任何意义。
看到这儿了,基本的右键菜单定制我就差很少描述完了,方法1和方法2都是使用传统的方式,方法3有些取巧。