2012-01-27 12 views
3

QMainWindowを継承するクラスを持っていて、それにボタンしか持たせたくない場合。閉じて、最小化し、ウィンドウバーで、私はどのように進む必要がありますか?Qt:閉じる、最小化、ヘルプボタン付きQMainWindow

ウィンドウフラグにこのコードを使用すると、最大化、最小化、および閉じるボタンが付いたウィンドウが表示されます。

"WindowMinimizeButtonHint"を除外すると、ヘルプと閉じるボタンしかありません。

可能であれば、閉じる、ヘルプ、最小化ボタンのみがあるようにするにはどうすればよいですか?

+0

既知のバグのようです:https://bugreports.qt-project.org/browse/QTBUG-8049 – JCooper

答えて

5

をMicrosoftのdocumentationによると...

WS_EX_CONTEXTHELPはWS_MAXIMIZEBOXで使用することはできませんまたは WS_MINIMIZEBOXスタイル。 Qt::WindowContextHelpButtonHintQt::WindowMinimizeButtonHintQt::WindowMaximizeButtonHintのための基盤となるWindowsシステムフラグです

0

Qtで直接行うことはできません。私はQtに同梱されている "Window Flags"の例で遊んだので、動作する組み合わせは得られません。

本当に必要な場合は、おそらく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)); 
} 
関連する問題