Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt:qmain窗口,带有关闭、最小化和帮助按钮_C++_Windows_Qt - Fatal编程技术网

C++ Qt:qmain窗口,带有关闭、最小化和帮助按钮

C++ Qt:qmain窗口,带有关闭、最小化和帮助按钮,c++,windows,qt,C++,Windows,Qt,如果我有一个继承QMainWindow的类,并且我希望它只包含按钮;在窗口栏中关闭、最小化和帮助,我应该如何继续 如果我将此代码用于窗口标志: setWindowFlags(Qt::Window | Qt::WindowContextHelpButtonHint | Qt::WindowMinimizeButtonHint) 它将生成一个带有最大化、最小化和关闭按钮的窗口 如果排除“WindowMinimizeButtonHint”,则只有一个帮助和关闭按钮 如果可能的话,我怎样才能使只有关闭、

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

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

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


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

我不认为您可以在Qt中直接执行此操作。我使用了Qt附带的“窗口标志”示例,但无法获得任何有效的组合

如果您真的需要它,您可能必须直接使用Windows API。这里有一个我用来在窗口中启用/禁用关闭按钮的函数。您可能会根据自己的目的对其进行调整。(或者,保持简单,只需在表单的某个位置添加一个额外的“帮助”按钮即可:-)

根据微软的

WS_EX_CONTEXTHELP不能与WS_MAXIMIZEBOX或 WS_最小化了电子书样式

哪些是
Qt::WindowContextHelpButtonHint
Qt::WindowMinimizeButtonHint
Qt::WindowMaximizeButtonHint

的底层windows系统标志看起来像是一个已知的错误:
#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));
}