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

qt qt4 qdialog

38090 观看

8回复

3938 作者的声誉

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

作者: AMM 的来源 发布者: 2008 年 9 月 17 日

回应 (8)


51

682 作者的声誉

决定

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

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

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枚举

作者: amos 发布者: 17.09.2008 10:44

28

3938 作者的声誉

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

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

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);
作者: AMM 发布者: 17.09.2008 11:53

4

2833 作者的声誉

这里列出的答案可行,但为了自己回答,我建议您运行示例程序$QTDIR/examples/widgets/windowflags。这将允许您测试窗口标志及其效果的所有配置。对于搞清楚松鼠窗口问题非常有用。

作者: Michael Bishop 发布者: 11.12.2008 02:15

0

31 作者的声誉

我找不到插槽但你可以覆盖虚拟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
作者: brandoneggar 发布者: 28.09.2010 10:12

10

371 作者的声誉

我在Windows 7,Qt 5.2中遇到过这个问题,并且最适合我的标志组合是这样的:

Qt :: WindowTitleHint | Qt的:: WindowCloseButtonHint

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

正如迈克尔·毕晓普(Michael Bishop)建议的那样,它正在播放窗口标志示例,这使我成为了这种组合。谢谢!

作者: rrwick 发布者: 26.02.2014 11:07

28

25702 作者的声誉

// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
作者: Jens A. Koch 发布者: 19.06.2015 09:43

1

2821 作者的声誉

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

将以下事件过滤器附加到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);
  }
作者: Predelnik 发布者: 29.08.2017 12:34

8

3182 作者的声誉

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

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);
作者: Parker Coates 发布者: 18.04.2018 05:46
32x32