ChatGPT解决这个技术问题 Extra ChatGPT

如何隐藏/删除“?” Qt对话框的“标题栏”上的帮助按钮?

我在我的一个应用程序中使用 Qt 对话框。我需要隐藏/删除帮助按钮。但我无法找到我得到他帮助按钮的句柄的确切位置。不确定它是否是 Qt 窗口上的特定标志。


J
Jens A. Koch
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);

这应该是公认的答案,因为它保留了以前设置的标志。
如果您不喜欢摆弄:setWindowFlags(windowFlags().setFlag(Qt::WindowContextHelpButtonHint, false)) 不过,这两者中哪一个更具可读性是非常主观的。
f
feedc0de

默认情况下,Qt::WindowContextHelpButtonHint 标志被添加到对话框中。您可以使用对话框构造函数的 WindowFlags 参数来控制它。

例如,您可以通过执行以下操作仅指定 TitleHint 和 SystemMenu 标志:

QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();

如果您添加 Qt::WindowContextHelpButtonHint 标志,您将获得帮助按钮。

在 PyQt 中,您可以执行以下操作:

from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()

有关窗口标志的更多详细信息,请参见 Qt 文档中的 WindowType enum


请参阅下面的 rrwick 答案。如果您没有将 Qt::WindowCloseButtonHint 添加到您的标志中,您将禁用关闭按钮,默认情况下该按钮已启用。
这是在 PyQt4 中指定窗口标志的链接,pyqt.sourceforge.net/Docs/PyQt4/qt.html#WindowType-enum
如果要激活关闭按钮,还可以添加标志 Qt::WindowCloseButtonHint
我可以只设置 QtCore.Qt.WindowCloseButtonHint 并删除 QtCore.Qt.WindowTitleHint。我假设设置标志会覆盖默认标志,因此您需要指定您想要的所有标志。
另请参阅下面@Parker Coates 的回复,了解如何删除“?”从 Qt 5.10 开始,在全球范围内使用单线
C
Clare Macrae

从 Qt 5.10 开始,您可以使用单个 QApplication 属性全局禁用这些按钮!

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

很有帮助,谢谢。但是不正确,如果您想在每个对话框的基础上更改它(虽然不是我的情况,所以我使用了您的解决方案)。
d
demonplus

好的,我找到了一种方法来做到这一点。

它确实处理窗口标志。所以这是我使用的代码:

Qt::WindowFlags flags = windowFlags()

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   
setWindowFlags(flags);

但是这样做有时会重置对话框的图标。因此,要确保对话框的图标不会改变,您可以添加两行。

QIcon icon = windowIcon();

Qt::WindowFlags flags = windowFlags();

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   

setWindowFlags(flags);

setWindowIcon(icon);

较短的版本:setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
@ThorbjørnLindeijer:您应该将此添加为答案。
r
rrwick

我在 Windows 7、Qt 5.2 中遇到了这个问题,最适合我的标志组合是:

Qt::WindowTitleHint | Qt::WindowCloseButtonHint

这给了我一个工作关闭按钮,但没有问号帮助按钮。仅使用 Qt::WindowTitleHint 或 Qt::WindowSystemMenuHint 摆脱了帮助按钮,但它也禁用了关闭按钮。

正如 Michael Bishop 所建议的那样,正是在使用 windowflags 示例导致我进行了这种组合。谢谢!


这是正确的答案。上面的答案禁用关闭按钮,默认情况下不会禁用。
对于任何使用 PyQT 的人,首先启动对话框,然后使用以下命令:self.setWindowFlags(QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowCloseButtonHint)
M
Michael Bishop

此处列出的答案会起作用,但要自己回答,我建议您运行示例程序 $QTDIR/examples/widgets/windowflags。这将允许您测试窗口标志的所有配置及其效果。对于找出 squirrelly windowflags 问题非常有用。


P
Predelnik

默认情况下,可以使用以下方法为应用程序中的所有对话框删除问号:

将以下事件过滤器附加到程序开始处的 QApplication

  bool eventFilter (QObject *watched, QEvent *event) override
  {
    if (event->type () == QEvent::Create)
      {
        if (watched->isWidgetType ())
          {
            auto w = static_cast<QWidget *> (watched);
            w->setWindowFlags (w->windowFlags () & (~Qt::WindowContextHelpButtonHint));
          }
      }
    return QObject::eventFilter (watched, event);
  }

H
Himanshu

我找不到插槽,但您可以覆盖虚拟 winEvent 函数。

#if defined(Q_WS_WIN)
bool MyWizard::winEvent(MSG * msg, long * result)
{
    switch (msg->message)
    {
    case WM_NCLBUTTONDOWN:
        if (msg->wParam == HTHELP)
        {

        }
        break;
    default:
        break;
    }
    return QWizard::winEvent(msg, result);
}
#endif

P
Pascal Vallaster

由于来自@amos 的 PyQt4 解决方案对我不起作用并且 PyQt4 的版本已被弃用,这是我关于如何删除“?”的解决方案。在 PyQt5 的对话框中:

class window(QDialog):
    def __init__(self):
        super(window, self).__init__()
        loadUi("window.ui", self)
        self.setWindowFlag(QtCore.Qt.WindowContextHelpButtonHint,False)  # This removes it

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅