2012-01-27 4 views
3

QMainWindow를 상속하는 클래스가 있고이 클래스에 단추 만 있으면 좋을 것입니다. 닫기, 최소화 및 창 바에서 어떻게 진행해야합니까?Qt : 닫기, 최소화 및 도움말 단추가있는 QMainWindow

이 코드를 창 플래그로 사용하는 경우 : setWindowFlags(Qt::Window | Qt::WindowContextHelpButtonHint | Qt::WindowMinimizeButtonHint); 그러면 최대화, 최소화 및 닫기 버튼이있는 창이 생성됩니다.

"WindowMinimizeButtonHint"를 제외하면 도움말과 닫기 버튼 만 있습니다.

가능한 경우 닫기, 도움말 및 최소화 버튼 만 만들 수 있습니까?

+0

알려진 버그 같습니다 : https://bugreports.qt-project.org/browse/QTBUG-8049 – JCooper

답변

5

을 마이크로 소프트의 documentation에 따르면 ..

WS_EX_CONTEXTHELP는 WS_MAXIMIZEBOX 사용할 수 없습니다 또는 WS_MINIMIZEBOX 스타일 Qt::WindowContextHelpButtonHint, Qt::WindowMinimizeButtonHintQt::WindowMaximizeButtonHint에 대한 기본 Windows 시스템 플래그입니다

.

0

Qt에서 직접 수행 할 수 있다고 생각하지 않습니다. 나는 Qt와 함께 제공되는 "Window Flags"예제를 가지고 놀았고 어떤 조합도 얻을 수 없었습니다.

정말 필요한 경우 Windows API를 직접 사용해야 할 수 있습니다. 다음은 Window에서 닫기 버튼을 활성화/비활성화하는 데 사용한 함수입니다. 당신은 아마도 그것을 당신의 목적에 맞게 조정할 수있을 것입니다. (또는 간단하게 그냥 양식에 어딘가에 여분의 "도움"버튼을 추가! :-))

#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)); 
} 
관련 문제