2014-11-17 54 views
3

默認情況下,QDialog窗口的右上角有一個問號按鈕。當我按下它時,鼠標光標變爲「禁止」遊標,似乎沒有其他事情發生。QDialog:如何使用問號(?)按鈕?

雖然有很多來自那些誰想要生成的信息刪除問號(atleastthree SO線程專門的話題),the documentation聲明QDialog沒有關於如何實際使用任何事情。

如何讓我的應用程序在單擊問號時顯示信息?例如,如何從按鈕獲得clicked信號?更好的是,這個按鈕在哪裏記錄?

回答

3

這不是Qt記錄的按鈕。您可以通過捕獲事件並檢查事件類型檢測這樣的:

http://qt-project.org/doc/qt-5/qevent.html#Type-enum

有不同的類型爲QEvent::EnterWhatsThisModeQEvent::WhatsThisClicked等。我實現了類似於你在mainwindow中使用事件過濾器的東西。

if(event->type() == QEvent::EnterWhatsThisMode) 
    qDebug() << "click"; 

當我點擊?按鈕時,我看到「點擊」。

+0

@Chrnobyl cool ...現在我需要弄清楚如何阻止它顯示'Forbidden'鼠標光標形狀 - 使它看起來像錯誤按下按鈕(非常奇怪的默認行爲,IMO)。 – neuronet

+0

@neuronet'Forbidden'鼠標光標應該放在每個不支持whatsThis的部件上,所以這是正常的,還是我誤解了你? – Chernobyl

+0

即使在重新實現事件之後,禁止遊標仍然被鎖定。即使當我向事件處理程序中添加'QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))'時,它也是類似的:暫時顯示爲箭頭,但當光標離開標題欄時,禁止遊標返回。我打算問這個問題作爲一個單獨的問題... – neuronet

1

基於切爾諾貝利的答案,這是我做到了在Python(PySide):

def event(self, event): 
    if event.type() == QtCore.QEvent.EnterWhatsThisMode: 
     print "click" 
     return True 
    return QtGui.QDialog.event(self, event) 

也就是說,要重新實現event當應用程序進入 'WhatsThisMode'。否則,將控制權交還給基類。

它幾乎可以工作。唯一的缺點是鼠標光標仍然變成'禁止'形狀。在前面的打印命令前右

QtGui.QWhatsThis.leaveWhatsThisMode() 

由於線路:基於another post,我被添加擺脫這一點。

4

其他答案對我來說有點誤導,只關注捕捉問號事件,但沒有解釋正常用法。

單擊此按鈕並觸發WhatsThisMode時,對話框元素應該提供有關他們自己的信息。如果鼠標懸停在支持此信息的元素上,指針將變成帶問號的指向箭頭(至少在Windows上),並在鼠標單擊時顯示工具提示消息。

以下是如何實現它在PySide:

someWidget.setWhatsThis("Help on widget") 

PySideQt5 QWhatsThis文檔也可以。

+0

這很棒,你是正確的上述答案專注於特殊用途,謝謝指出標準使用和文檔! – neuronet