Вы не можете сделать это с Qt, потому что это ОС специфичны. Но вы можете использовать функции GetSystemMenu и AppendMenu в Windows, чтобы изменить меню, а затем поймать события, которые затем щелкнули по элементу.
Вот простой пример из here. Он добавляет разделитель и пункт к меню:
#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), и вам нужно использовать m с MSG * msg = reinterpret_cast (m); –
jaba