在 QWidget 中按需显示系统菜单

Adr*_*ire 5 c++ qt

通常,右键单击窗口的标题栏会system-menu弹出一个窗口。

在此输入图像描述

我的问题是:如何强制此菜单按需弹出:例如单击按钮时。

QApplication a(argc, argv);
QWidget window;
window.resize(200,100);
QPushButton button(&window);
button.connect( &button, &QPushButton::clicked, [&window]()
{
    // here show the window system menu:
    // window.showSystemMenu(QPoint(0,0));
});
window.show();

a.exec();
Run Code Online (Sandbox Code Playgroud)

注意:要将此信号/槽与 lambda 一起使用,需要 C++11。但纯 C++03 也是有效的。

编辑:

实际上,我将此菜单创建为 QMenu,其中填充了与默认 Windows 菜单相同的内容。这适用于任何平台,但内容可能与预期不同。

vah*_*cho 3

由于这是 Windows 特定菜单,因此您必须使用 Windows 本机 API 来获取并显示系统菜单。假设您实现了一个插槽并将其连接到按钮的clicked()信号:

void MyClass::onButtonClicked()
{
#ifdef WIN32
    HMENU systemMenu = ::GetSystemMenu(window.winId(), FALSE);
    if (systemMenu) {
        // Open system menu in the left top corner of window.
        TrackPopupMenu(systemMenu, TPM_LEFTALIGN|TPM_LEFTBUTTON,
                       window.pos().x(), window.pos().y(), NULL,
                       w.winId(), 0);
    }

#endif
}
Run Code Online (Sandbox Code Playgroud)

哪里window是 a QWidget.