【问题标题】:How to run functions from context menu in QGraphicsItem如何从 QGraphicsItem 的上下文菜单中运行函数
【发布时间】:2011-08-01 00:35:54
【问题描述】:

我正在尝试在我的 QGraphicsItem 子类中实现一个上下文菜单,如下所示:

void ImagePixmapItem::right_clicked(){
    qDebug("Got here!");
}

void ImagePixmapItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){
    QMenu menu;
    QAction *removeAction = menu.addAction("Remove");
    QAction *markAction = menu.addAction("Mark");
    QAction *selectedAction = menu.exec(event->screenPos());

    connect(selectedAction, SIGNAL(triggered()),this, SLOT(right_clicked()));
}

我做错了什么?文字“到了!”永远不会被解雇,此外,我如何修改它以知道从菜单中选择了哪个操作?

谢谢

【问题讨论】:

    标签: c++ qt4 qgraphicsitem


    【解决方案1】:

    当菜单对象超出范围时,QMenu 被删除。

    试试这个:

    void ImagePixmapItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
    {
        std::auto_ptr<QMenu> menu(new QMenu(address_of_parent_widget));
        QAction *removeAction = menu->addAction("Remove");
        QAction *markAction = menu->addAction("Mark");
        QAction *selectedAction = menu->exec(event->screenPos());
        if ( selectedAction != 0 ) { 
            // see: http://doc.trolltech.com/4.3/qmenu.html#exec-2
            this->right_clicked();
        }
    }
    

    【讨论】:

    • 实际上,信号连接需要出现在 menu->exec 之前。如果你在你的回答中解决这个问题,我会接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多