如何隐藏/删除Qt对话框的“标题栏”上的“?”帮助button?
我在我的一个应用程序中使用Qt对话框。 我需要隐藏/删除帮助button。 但是,我无法find我正在得到他的帮助button的句柄。 不知道在Qt窗口上是否有特定的标志。
默认情况下, Qt :: WindowContextHelpButtonHint标志被添加到对话框中。 您可以使用WindowFlags参数控制对话框构造函数。
例如,您可以通过执行以下操作来只指定TitleHint和SystemMenu标志:
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); }