我正在使用Qt对话框在我的应用程序中。我需要隐藏/删除帮助按钮,但我不知道如何定位到帮助按钮的句柄,也不确定是不是在Qt窗口的特定标志上。
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
默认情况下,对话框会添加 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
。 - Donald DuckQtCore.Qt.WindowCloseButtonHint
,就可以删除 QtCore.Qt.WindowTitleHint
。我认为设置标志覆盖了默认标志,因此您需要指定所有需要的标志。 - artomasonQApplication
属性全局禁用这些按钮!QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);
QApplication.setAttribute(Qt.ApplicationAttribute.AA_DisableWindowContextHelpButton)
。 - undefined好的,我找到了一种方法来解决这个问题。
它涉及到窗口标志。所以这是我使用的代码:
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ørn Lindeijer我在Windows 7,Qt 5.2中遇到了这个问题,对我而言最有效的组合是:
Qt::WindowTitleHint | Qt::WindowCloseButtonHint
这样可以让关闭按钮正常工作,但没有帮助按钮。仅使用Qt::WindowTitleHint或Qt::WindowSystemMenuHint可以去掉帮助按钮,但会禁用关闭按钮。
正如Michael Bishop所建议的那样,正是通过尝试windowflags示例才找到了这种组合。谢谢!
$QTDIR/examples/widgets/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);
}
由于@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
我找不到插槽,但您可以覆盖虚拟的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
setWindowFlags(windowFlags().setFlag(Qt::WindowContextHelpButtonHint, false))
哪个更易读,这取决于主观判断。 - Parker Coates