通常,右键单击窗口的标题栏会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 菜单相同的内容。这适用于任何平台,但内容可能与预期不同。
由于这是 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.
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |