Qt:带有关闭、最小化和帮助按钮的主窗口

3
如果我有一个继承自QMainWindow的类,并且我希望它在窗口栏中只有关闭、最小化和帮助按钮,我该怎么办?
如果我使用以下代码来设置窗口标志: setWindowFlags(Qt::Window | Qt::WindowContextHelpButtonHint | Qt::WindowMinimizeButtonHint); 这会导致窗口具有最大化、最小化和关闭按钮。
如果我排除"WindowMinimizeButtonHint",那么只有帮助和关闭按钮。
如果可能的话,我该如何设置只有关闭、帮助和最小化按钮?

它看起来像是一个已知的 bug: https://bugreports.qt-project.org/browse/QTBUG-8049 - JCooper
2个回答

5
根据 Microsoft 的 文档,WS_EX_CONTEXTHELP 不能与 WS_MAXIMIZEBOX 或 WS_MINIMIZEBOX 样式一起使用。
这些是 Qt::WindowContextHelpButtonHint、Qt::WindowMinimizeButtonHint 和 Qt::WindowMaximizeButtonHint 的底层 Windows 系统标志。请注意,保留 HTML 标签。

0

我认为你不能直接在Qt中完成这个功能。我尝试了一下Qt自带的“窗口标志”示例,但是没有找到任何可行的组合。

如果你真的需要这个功能,你可能需要直接使用Windows API。这里有一个函数,我用它来启用/禁用窗口中的关闭按钮。你可以根据你的需求进行适当的调整。(或者,简单点,在你的表单上添加一个额外的“帮助”按钮!:-))

#include "Windows.h"
#include "WinUser.h"
typedef HMENU (WINAPI*pGetSystemMenu)(HWND, BOOL);
typedef BOOL (WINAPI*pEnableMenuItem)(HMENU, UINT, UINT);

void myapp::SetCloseButtonEnabled(QWidget *target, bool enabled) {
  // See msdn.microsoft.com/en-us/library/windows/desktop/ms647636(v=vs.85).aspx
  QLibrary user32(QLatin1String("user32"));
  pGetSystemMenu GetSystemMenu =
      (pGetSystemMenu)user32.resolve("GetSystemMenu");
  pEnableMenuItem EnableMenuItem =
      (pEnableMenuItem)user32.resolve("EnableMenuItem");
  HMENU menu = GetSystemMenu(target->winId(), false);
  EnableMenuItem(menu,
                 SC_CLOSE,
                 MF_BYCOMMAND | (enabled ? MF_ENABLED : MF_GRAYED));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接