2014-11-17 51 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