自訂按鍵響應QComboBox選擇選項的方法

來源:互聯網
上載者:User

最近做一個Qt項目,介面中有一個QComboBox,這裡稱為combobox。要求不用滑鼠操作,用按鍵,在combobox未快顯功能表的情況,按上下左右鍵是選擇另外widget,在快顯功能表的情況下,是選擇選項。

因為要求介面中的各個widget必須要能夠按照自己定義的順序被選取(按上下左右鍵),所以只能自己重寫按鍵響應,於是我給combobox安裝了過濾器,自己對combobox進行按鍵響應。

有兩個痛點:

1.如果判斷combobox是彈出了菜單還是未快顯功能表的狀態

2.如果在快顯功能表的情況下,如何在對上下移動做按鍵響應(也就是高亮指定的項)

1.在多次實驗的情況我發現combobox->view()->isVisable()可以用來判斷是否是彈出了菜單。

2.試了很多種辦法都沒法解決。

  最後在查閱了原始碼的情況下,發現彈出的菜單是由combobox中的view來管理的。而view有一個selectionModel是用來管理選項的高亮的。終於找到了正確的使用方法。

combobox->view()->selectionModel()->setCurrentIndex(combobox->model()->index(index,combobox->modelColumn(),combobox->rootModelIndex()),QItemSelectionModel::ClearAndSelect);

 

也許還有更好的辦法,或者是我走入了死胡同,暫時先這麼著吧。

補充說明,查看原始碼之後,comboBox自己預設的按鍵響應裡會響應QEvent::ShortCutOverride這個事件,當按下ENTER,RETURN鍵時會響應此事件執行hidePopup()

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.