在QWidget中按需显示系统菜单

时间:2015-10-30 09:13:40

标签: c++ qt

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

enter image description here

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

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();

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

编辑:

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

1 个答案:

答案 0 :(得分:2)

由于这是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
}

其中windowQWidget