QDialog:如何使用问号(?)按钮?

时间:2014-11-17 15:02:15

标签: qt pyqt pyside

默认情况下,QDialog窗口的右上角有一个问号按钮。当我按下它时,鼠标光标变为'Forbidden'光标,似乎没有其他任何事情发生。

虽然从那些想要删除问号的人那里产生了大量信息,但at least three SO线程专门用于该主题,QDialog的the documentation没有关于如何实际使用它的任何内容。

如何在点击问号时让我的应用程序显示信息?例如,如何从按钮获得clicked信号?更好的是,这个按钮记录在哪里了?

3 个答案:

答案 0 :(得分:8)

其他答案对我来说有点误导,只关注捕捉问号事件,但没有解释正常用法。

单击此按钮并触发 WhatsThisMode 时,对话框的元素应该提供有关自己的信息。如果鼠标悬停在支持此信息的元素上,则指针将变为带有问号的指向箭头(至少在Windows上),并在鼠标单击时显示工具提示消息。

以下是如何在PySide中实现它:

someWidget.setWhatsThis("Help on widget")

QWhats此PySideQt5的文档也可用。

答案 1 :(得分:3)

这不是Qt记录的按钮。您可以通过捕获事件和检查事件类型来检测这一点:

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

QEvent::EnterWhatsThisMode QEvent::WhatsThisClicked等不同类型。我在mainwindow中使用事件过滤器实现了类似于你想要的东西。

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

当我点击?按钮时,我看到了“点击”。

答案 2 :(得分:1)

根据切尔诺贝利的回答,这就是我在Python(PySide)中的表现:

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

也就是说,当应用输入'WhatsThisMode'时,您重新实现event。否则,将控制权传递回基类。

它几乎可以工作。唯一的缺点是鼠标光标仍然变成'禁止'形状。基于another post,我通过添加:

来摆脱它
QtGui.QWhatsThis.leaveWhatsThisMode()

作为前一个打印命令之前的行。