【问题标题】:QMenu exec to return on a QMenu click (instead of QAction)QMenu exec 在 QMenu 单击时返回(而不是 QAction)
【发布时间】:2014-08-08 06:04:16
【问题描述】:

我正在构建一个菜单,我希望能够同时单击 QActionQMenu 项目。

运行exec 时,如果我单击QMenu,则不会发生任何事情。 即使我向QMenu 添加了一个操作。

有没有办法做到这一点?

这是我尝试过的:

QMenu* menu = new QMenu( "xxx", topMenu );
QAction* action = menu->menuAction();
topMenu->addAction( action );

【问题讨论】:

    标签: qt qt4 qmenu qaction


    【解决方案1】:

    编辑:

    我不知道为什么 exec() 使它与众不同,但要绕过它,您可以创建 QMenu 的子类作为您的 topMenu,以便它像这样手动处理鼠标释放事件:

    void CustomMenu::mouseReleaseEvent(QMouseEvent *event) {
    
        QAction *const actionAtEvent = actionAt(event->pos());
    
        if (actionAtEvent)
            actionAtEvent->trigger();
    
        QMenu::mouseReleaseEvent(event);
    }
    

    原始的,无用的答案:

    它可能会帮助您使用QMenu::menuAction() 来获得关联的QAction 并连接它的信号。

    【讨论】:

    • 感谢您的回复。我已经使用了 menuAction(请参阅更新后的帖子),但是如何在运行 exec 时连接要使用的信号?
    • 我试了一下没有成功。执行菜单时正在调用该方法,但在单击正确的 QAction 之前 exec 方法不会返回。
    • 也许我不太了解您想要实现的目标。我创建了菜单 topMenu。它有 childMenu,有一些动作。我 exec() topMenu,弹出显示,单击 childMenu 项目以展开它(时钟不在它的子操作上),此方法被调用,并且 childMenu->menuAction() 操作被触发,信号/插槽被调用,菜单关闭。你想..?
    • 嗯,这正是我想要做的......我和你描述的完全一样,只是菜单不会自动关闭。
    • 问题是我正在使用菜单本身级别的操作(通过使用 menu->featureAction() )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多