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

我在我的一个应用程序中使用Qt对话框。 我需要隐藏/删除帮助button。 但是,我无法find我正在得到他的帮助button的句柄。 不知道在Qt窗口上是否有特定的标志。

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

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

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

如果你添加Qt :: WindowContextHelpButtonHint标志,你会得到帮助button。

在PyQt中,你可以这样做:

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

有关窗口标志的更多细节可以在Qt文档的WindowType枚举中find。

好吧,我find了一个方法来做到这一点。

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

 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); 
 // remove question mark from the title bar setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); 

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

Qt :: WindowTitleHint | Qt的:: WindowCloseButtonHint

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

正如迈克尔·毕晓普(Michael Bishop)所build议的那样,它正在使用windowflags的例子来引导我进行这种组合。 谢谢!

这里列出的答案是可行的,但要自己回答,我build议您运行示例程序$QTDIR/examples/widgets/windowflags 。 这将允许您testing窗口标志及其效果的所有configuration。 非常有用的搞清楚松鼠windowflags问题。

我找不到插槽,但可以覆盖虚拟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 

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

将以下事件filter附加到程序开始的某个地方的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); }