按需在QWidget中显示系统菜单

5
通常,右键单击窗口的标题栏会弹出一个系统菜单。

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菜单相同的内容。这将在任何平台上工作,但内容可能与预期的不同。

我仍在寻找一个不使用特定平台库的答案。换句话说,不使用标签中指定的QT库。 - Adrian Maire
1个回答

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
}

这里的window指的是一个QWidget


谢谢!如果没有其他选择,我可能会去尝试类似的东西。但是我们使用QT来制作跨平台应用程序,而且大多数窗口管理器都支持此功能。 - Adrian Maire
注意:windowyourWidget->window(); - Dmitry Sazonov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接