将自定义操作添加到QDialog中的系统菜单

当点击QDialog标题栏上的图标时,我需要在显示的系统菜单中添加一个自定义动作(比如说'关于'点击一个QMessageBox需要显示的动作'')。 我如何做到这一点?

问候,巴拉思

窗口组件

你不能用Qt来做,因为它是特定于操作系统的。 但是,您可以在Windows中使用GetSystemMenu和AppendMenu函数修改菜单,然后捕获单击项目的事件。

这里是一个简单的例子。 它附加一个分隔符和一个关于项目的菜单:

#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