我想对这段代码做什么,就是以编程方式将焦点放在QMenu
项上。但QMenu::setActiveAction()
和QMenu::popup()
都不起作用。
我怎么能这样做?
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QMainWindow *window = new QMainWindow();
window->setWindowTitle(QString::fromUtf8("Test:QMenu"));
window->resize(336, 227);
QAction *newAct = new QAction("&New",window);
QAction *openAct = new QAction("&Open",window);
QAction *saveAct = new QAction("&Save",window);
QMenu *fileMenu;
fileMenu = window->menuBar()->addMenu("&File");
fileMenu->addAction(newAct);
fileMenu->addAction(openAct);
fileMenu->addAction(saveAct);
window->show();
fileMenu->popup(QPoint(10,10));
return app.exec();
}
答案 0 :(得分:0)
QMenu项目不像其他小部件那样“可聚焦”。实际上,它们不应该,因为你想要的并不是它们的常用做法。
作为一种解决方法,在鼠标按下时,您可以获得鼠标光标位置,预先计算弹出菜单中默认菜单项的偏移量,并在该点显示菜单,鼠标光标位于默认菜单项下方。建议使用此解决方案here。
此外,对于用户来说更好的是,选择默认菜单项后,您可以在显示弹出窗口后生成窄键按钮事件。这适用于Windows,但不确定其他操作系统。