一、QLineEdit說明
QLineEdit是單行文本框,不同於QTextEdit,他只能顯示一行文本,通常可以用作用戶名、密碼和搜索框等。它還提供了一些列的信號和槽,方便我們使用,有興趣的小伙伴可以直接去看幫助文檔,我在這里就不多廢話了。但是呢,我在這里卻要單獨的說幾個接口,因為他們很容易被人忽略,但是卻又是一個很好用、可以經常用到的功能。
- addAction(QAction *action, ActionPosition position):可以在編輯框的開始或者末尾添加一個action,方便我們操作,一個完美的搜索框頓時出現。
- setEchoMode(EchoMode):文本顯示模式,通過這個接口可以設置成為密碼框,其中的參數意思一次為:正常、什么都不顯示、密碼、剛輸入時顯示字符緊接着變成密碼狀態
- setCompleter(QCompleter *c):看這個單詞的意思:完成。顧名思義這個借口可以設置文編輯框編輯時自動補齊的功能,類似於百度輸入框的自動提示功能,如果想要了解細節功能請自行百度,或者移步QCompleter自動補全
- setSelection(int start, int length):設置是否能選中文本
- setValidator(const QValidator *v):內容驗證器
圖1 addAction使用截圖
如圖1所示,是addAction使用截圖,右側按鈕圖標是我使用style()->standardPixmap(QStyle::SP_TitleBarMinButton)添加的,
二、右鍵菜單定制
本文描述的3種右鍵菜單定制,也同樣適用於其他繼承自QWidget的類。
首先我們看下圖2所示,這是qt幫助文檔中的一個枚舉,這個枚舉對於制作右鍵菜單有至關重要的作用,相信大多數的小伙伴肯定都見過,也都明白是什么意思。
圖2 ContextMenuPolicy枚舉
其實qt的命名還是比較合理的,從英文單詞上我們大概就能知道這個宏的作用,下面我來一次說下這個幾個宏的含義。1、沒有右鍵菜單;2、組織右鍵菜單彈出,不同於第一個,該宏還阻止事件傳遞給父窗口;3、缺省的值,右鍵菜單在窗口類的contextMenuEvent函數中處理;4、使用窗口的action來彈出菜單,這個對於table和tree來說比較方便;5、右鍵事件在customContextMenuRequested對應的槽函數中實現,當然了槽需要我們自己寫。
方法1:
實現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有些取巧。
三、相關文章