1
QDialog의 제목 표시 줄에 아이콘이 표시 될 때 나타나는 시스템 메뉴에서 사용자 지정 작업을 추가해야합니다 ('About (정보)'QMessageBox를 표시해야하는 것을 말함) 클릭합니다. 이것을 어떻게 성취합니까? 이 OS는 특정 때문에QDialog의 시스템 메뉴에 사용자 지정 작업 추가
안부, 바라 스는
QDialog의 제목 표시 줄에 아이콘이 표시 될 때 나타나는 시스템 메뉴에서 사용자 지정 작업을 추가해야합니다 ('About (정보)'QMessageBox를 표시해야하는 것을 말함) 클릭합니다. 이것을 어떻게 성취합니까? 이 OS는 특정 때문에QDialog의 시스템 메뉴에 사용자 지정 작업 추가
안부, 바라 스는
당신은 Qt를 함께 할 수 없습니다. 그러나 Windows에서 GetSystemMenu 및 AppendMenu 함수를 사용하여 메뉴를 수정 한 다음 해당 항목을 클릭하면 이벤트를 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
감사합니다. 저것을 시도하게하십시오. – Bharath
제공된 솔루션이 작동하지만 다음과 같은 변경 사항이 있습니다. 'winEvent'는 Qt 5에서 지원되지 않습니다. 이것은'QWidget :: nativeEvent'로 대체됩니다. [QWidget :: nativeEvent()] (http://qt-project.org/doc/qt-5/qwidget .html # nativeEvent). 그 밖의 모든 것은 동일하게 유지됩니다. 다시 한번 감사드립니다. – Bharath
감사합니다. 다른 사람들을 위해 : winEvent는 이제 nativeEvent (const QByteArray & eventType, void * m, long * result)이고 MSG를 사용하여 m을 캐스팅해야합니다. * msg = reinterpret_cast (m); –
jaba