Qt之自定義QLineEdit右鍵菜單


一、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有些取巧。

三、相關文章

  1. Qt之默認菜單語言設置
  2. Qt之彈出式菜單陰影
  3. Qt之自定義檢索框
  4. QTextEdit之最大字符數

 

如果您覺得文章不錯,不妨給個 打賞,寫作不易,感謝各位的支持。您的支持是我最大的動力,謝謝!!! 

 

  


很重要--轉載聲明

  1. 本站文章無特別說明,皆為原創,版權所有,轉載時請用鏈接的方式,給出原文出處。同時寫上原作者:朝十晚八 or Twowords
  2. 如要轉載,請原文轉載,如在轉載時修改本文,請事先告知,謝絕在轉載時通過修改本文達到有利於轉載者的目的。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM