【问题标题】:Qt: QMainWindow with a close, minimize and help buttonQt:带有关闭、最小化和帮助按钮的 QMainWindow
【发布时间】:2012-02-20 18:46:33
【问题描述】:

如果我有一个继承 QMainWindow 的类,并且我希望它只有按钮;在窗口栏中关闭、最小化和帮助,我应该如何进行?

如果我将此代码用于窗口标志: setWindowFlags(Qt::Window | Qt::WindowContextHelpButtonHint | Qt::WindowMinimizeButtonHint); 它会生成一个带有最大化、最小化和关闭按钮的窗口。

如果我排除“WindowMinimizeButtonHint”,则只有一个帮助和关闭按钮。

如果可能的话,我怎样才能使只有关闭、帮助和最小化按钮?

【问题讨论】:

标签: c++ windows qt


【解决方案1】:

根据微软的documentation..

WS_EX_CONTEXTHELP 不能与 WS_MAXIMIZEBOX 或 WS_MINIMIZEBOX 样式。

Qt::WindowContextHelpButtonHintQt::WindowMinimizeButtonHintQt::WindowMaximizeButtonHint 的底层 Windows 系统标志。

【讨论】:

    【解决方案2】:

    我认为您不能直接在 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));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2012-12-09
      • 2012-06-23
      • 1970-01-01
      • 2011-02-02
      • 2016-03-04
      • 2016-10-04
      相关资源
      最近更新 更多