如何以编程方式设置焦点QMenu项目

时间:2013-04-12 09:16:01

标签: c++ qt qt4 qmenu

我想对这段代码做什么,就是以编程方式将焦点放在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();
}

1 个答案:

答案 0 :(得分:0)

QMenu项目不像其他小部件那样“可聚焦”。实际上,它们不应该,因为你想要的并不是它们的常用做法。

作为一种解决方法,在鼠标按下时,您可以获得鼠标光标位置,预先计算弹出菜单中默认菜单项的偏移量,并在该点显示菜单,鼠标光标位于默认菜单项下方。建议使用此解决方案here

此外,对于用户来说更好的是,选择默认菜单项后,您可以在显示弹出窗口后生成窄键按钮事件。这适用于Windows,但不确定其他操作系统。