2014-09-04 2 views
1

QDialog의 제목 표시 줄에 아이콘이 표시 될 때 나타나는 시스템 메뉴에서 사용자 지정 작업을 추가해야합니다 ('About (정보)'QMessageBox를 표시해야하는 것을 말함) 클릭합니다. 이것을 어떻게 성취합니까? 이 OS는 특정 때문에QDialog의 시스템 메뉴에 사용자 지정 작업 추가

안부, 바라 스는

Window components

답변

2

당신은 Qt를 함께 할 수 없습니다. 그러나 Windows에서 GetSystemMenuAppendMenu 함수를 사용하여 메뉴를 수정 한 다음 해당 항목을 클릭하면 이벤트를 catch 할 수 있습니다.

여기에 here의 간단한 예가 나와 있습니다. 메뉴에 구분 기호 및 about 항목을 추가합니다.

#include "windows.h" 

// IDM_ABOUTBOX must be in the system command range 
//  (IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX) 
// and (IDM_ABOUTBOX < 0xF000) 
#define IDM_ABOUTBOX 0x0010 

MyWidget::MyWidget() : QMainWindow() 
{ 
... 
HMENU hMenu = ::GetSystemMenu(winId(), FALSE); 
if (hMenu != NULL) 
{ 
    ::AppendMenuA(hMenu, MF_SEPARATOR, 0, 0); 
    ::AppendMenuA(hMenu, MF_STRING, IDM_ABOUTBOX, "About MyApp..."); 
} 

... 
} 

bool MyWidget::winEvent(MSG *m, long *result) 
{ 
    if (m->message == WM_SYSCOMMAND) 
    { 
    if ((m->wParam & 0xfff0) == IDM_ABOUTBOX) 
    { 
     *result = 0; 
     // open About dialog 
     about(); 
     return (true); 
    } 
    } 

    return (false); 
} 

PRO-file: 
LIBS += -lUser32 
+0

감사합니다. 저것을 시도하게하십시오. – Bharath

+1

제공된 솔루션이 작동하지만 다음과 같은 변경 사항이 있습니다. 'winEvent'는 Qt 5에서 지원되지 않습니다. 이것은'QWidget :: nativeEvent'로 대체됩니다. [QWidget :: nativeEvent()] (http://qt-project.org/doc/qt-5/qwidget .html # nativeEvent). 그 밖의 모든 것은 동일하게 유지됩니다. 다시 한번 감사드립니다. – Bharath

+0

감사합니다. 다른 사람들을 위해 : winEvent는 이제 nativeEvent (const QByteArray & eventType, void * m, long * result)이고 MSG를 사용하여 m을 캐스팅해야합니다. * msg = reinterpret_cast (m); – jaba

관련 문제