我在我的一个应用程序中使用Qt对话框。我需要隐藏/删除帮助按钮。但是我无法准确找到我的帮助按钮的位置。不知道它是否是Qt窗口上的特定标志。
Answers:
默认情况下,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枚举中找到有关窗口标志的更多详细信息。
Qt::WindowCloseButtonHint
如果要激活关闭按钮,也请添加标记。
QtCore.Qt.WindowCloseButtonHint
它并删除它QtCore.Qt.WindowTitleHint
。我假设设置标志会覆盖默认标志,因此您需要指定所需的所有标志。
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
好的,我找到了一种方法。
它确实处理窗口标志。所以这是我使用的代码:
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);
我在Windows 7,Qt 5.2中遇到了这个问题,最适合我的标志组合是:
Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint
这使我可以使用关闭按钮,但没有问号帮助按钮。仅使用Qt :: WindowTitleHint或Qt :: WindowSystemMenuHint摆脱了帮助按钮,但它也禁用了关闭按钮。
正如迈克尔·毕晓普(Michael Bishop)所建议的,正是在玩windowflags示例的情况下,我才想到了这种结合。谢谢!
可以使用以下方式默认删除应用程序中所有对话框的问号:
将以下事件过滤器附加到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);
}
我找不到插槽,但是您可以覆盖虚拟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