Qt: QMainWindow с кнопкой закрытия, сворачивания и помощи - PullRequest
3 голосов
/ 27 января 2012

Если у меня есть класс, который наследует QMainWindow, и я хочу, чтобы он имел только кнопки;закрыть, свернуть и помочь в строке окна, как мне действовать?

Если я использую этот код для флагов окна: setWindowFlags(Qt::Window | Qt::WindowContextHelpButtonHint | Qt::WindowMinimizeButtonHint); В результате появится окно с кнопкой развернуть, свернуть и закрыть.

Если я исключаю «WindowMinimizeButtonHint», то есть только кнопка справки и закрытия.

Как, если возможно, сделать так, чтобы была кнопка ТОЛЬКО для закрытия, помощи и сворачивания?

Ответы [ 2 ]

5 голосов
/ 28 января 2012

Согласно документации Microsoft ..

WS_EX_CONTEXTHELP нельзя использовать со стилями WS_MAXIMIZEBOX или WS_MINIMIZEBOX.

, которые являются базовой системой Windowsфлаги для Qt::WindowContextHelpButtonHint, Qt::WindowMinimizeButtonHint и Qt::WindowMaximizeButtonHint.

0 голосов
/ 28 января 2012

Я не думаю, что вы можете сделать это напрямую в 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...