![]() |
![]() |
很重要--轉載聲明
- 本站文章無特別說明,皆爲原創,版權全部,轉載時請用連接的方式,給出原文出處。同時寫上原做者:朝十晚八 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有些取巧。