Как запускать функции из контекстного меню в QGraphicsItem - PullRequest
1 голос
/ 08 апреля 2011

Я пытаюсь реализовать контекстное меню в моем подклассе 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()));
}

Что я делаю не так?Текст "Попал сюда!"никогда не срабатывает, и, кроме того, как я могу изменить это, чтобы знать, какое действие было выбрано из меню?

Спасибо

1 Ответ

1 голос
/ 08 апреля 2011

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();
    }
}
...