通常,右键单击窗口的标题栏,弹出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();
注意:要将此信号/插槽与lambda一起使用,则需要C ++ 11。但纯C ++ 03也是有效的。
编辑:
我实际上将此菜单创建为QMenu,我填充的内容与默认Windows菜单相同。这可以在任何平台上使用,但内容可能与预期不同。
答案 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
}
其中window
是QWidget
。