【问题标题】:QDialog: how to use question mark (?) button?QDialog:如何使用问号(?)按钮?
【发布时间】:2015-01-14 12:47:11
【问题描述】:

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

虽然有很多信息来自那些想要删除问号的人(atleastthreeSO 线程专门用于该主题),the documentation 用于 QDialog没有任何关于如何实际使用它的信息。

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

【问题讨论】:

    标签: qt pyqt pyside


    【解决方案1】:

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

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

    下面是在 PySide 中的实现方法:

    someWidget.setWhatsThis("Help on widget")
    

    QWhatsPySideQt5 的文档也可用。

    【讨论】:

    • 这很好,你是对的,上面的答案专注于特殊用途,感谢您指出标准用途和文档!
    • 我已经在 qt 设计器中看到了这个属性是什么,所以你可以从那里进行管理。
    【解决方案2】:

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

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

    QEvent::EnterWhatsThisModeQEvent::WhatsThisClicked等不同的类型。我在主窗口中使用事件过滤器实现了类似于您正在寻找的东西。

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

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

    【讨论】:

    • @Chrnobyl 很酷...现在我需要弄清楚如何阻止它显示“禁止”鼠标光标形状 - 看起来按钮被错误按下(很奇怪的默认行为, imo)。
    • @neuronet 'Forbidden' 鼠标光标应该在每个不支持 whatsThis 的小部件上,所以这是正常的,还是我误解了你?
    • 即使在我重新实现事件之后,禁止光标仍然被锁定。即使我将QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) 添加到事件处理程序时也类似:暂时显示为箭头,但当光标离开标题栏时,禁止光标返回。我打算把这个作为一个单独的问题来问......
    【解决方案3】:

    根据切尔诺贝利的回答,这就是我在 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()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-26
      • 2011-02-27
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多