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

StackOverflow https://stackoverflow.com/questions/81627

  •  09-06-2019
  •  | 
  •  

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

有帮助吗?

解决方案

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

例如,您可以仅指定 标题提示系统菜单 通过执行以下操作进行标记:

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 文档中。

其他提示

// 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);

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

qt :: windowtitlehint | QT :: WindowCloseButtonHint

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

正如 Michael Bishop 所建议的,正是通过使用 windowflags 示例,我才得出了这个组合。谢谢!

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

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

此处列出的答案可行,但要自己回答,我建议您运行示例程序 $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);
  }

我找不到插槽,但你可以覆盖虚拟插槽 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top