Добавить пользовательское действие в системное меню в QDialog
Мне нужно добавить пользовательское действие (скажем, "О", щелкнув по которому нужно отобразить QMessageBox) в системном меню, отображаемом при нажатии значка в строке заголовка QDialog. Как мне этого добиться?
С уважением, Бхарат
1 ответ
Решение
Вы не можете сделать это с Qt, потому что это зависит от ОС. Но вы можете использовать функции GetSystemMenu и AppendMenu в Windows, чтобы изменить меню, а затем перехватить события, по которым щелкнет этот элемент.
Вот простой пример отсюда. Он добавляет разделитель и элемент 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