1

我有一個Qt的主窗口小部件,這個窗口部件包含一個QGraphicsView和它的內部QGraphicsScene。在場景中,我添加了QGraphicsPixmapItem s和QGraphicsTextItem s。在主窗口部件我處理QWidget::mouseDoubleClickEvent (QMouseEvent * event),我的項目都設置標誌用:QGraphicPixmapItem雙擊事件不會去父窗口小部件,而QGraphicsTextItem發送

mItem->setFlag (QGraphicsItem::ItemIsMovable); 
mItem->setFlag (QGraphicsItem::ItemIsSelectable); 
mItem->setFlag (QGraphicsItem::ItemIsFocusable); 

因爲我想移動項目中的場景,並選擇他們,當雙擊出現主窗口部件也想處理該。當我雙擊到QGraphicsTextItem它進入mouseDoubleClickEvent在主窗口小部件中,但是當我雙擊到QGraphicsPixmap項目時,它吸收雙擊並且不發送它到主窗口小部件。當ItemIsFocusable標誌沒有設置時,QGraphicsTextItem也會吸收雙擊事件。爲什麼會發生?
我不想實現QGraphicsItem的子類,並想使用已定義的方法。下面是我做的一個畫面:

enter image description here

+0

你認爲你的代碼在做什麼的文本描述可能與它實際做的有很大不同。我建議發佈一個代碼示例以改善問題。 – TheDarkKnight

+0

你希望'QGraphicsPixmapItem'在雙擊上做什麼?項目做他們的默認實現:除非你繼承他們並且做你自己的實現。 – Thalia

回答

1

我找到了一個解決方案,因爲我QGraphicsPixmapItemQGraphicsTextItem表現不同上雙擊:QGraphicsTextItem將其雙擊事件於母公司而QGraphicsPixmapItem不,我註釋掉ItemIsFocusable屬性:

mItem->setFlag (QGraphicsItem::ItemIsMovable); 
mItem->setFlag (QGraphicsItem::ItemIsSelectable); 
//mItem->setFlag (QGraphicsItem::ItemIsFocusable); 

因爲即使ItemIsFocusableQGraphicsItem性質,它不表現在不同相同繼承類, 所以爲了處理雙擊我在主小部件中安裝了一個事件篩選器QGraphicsScene,它包含QGraphicsItem

this->ui.graphicsViewMainScreen->scene ()->installEventFilter (this); 

而作爲執行事件過濾器:

bool MyMainWidget::eventFilter (QObject *target , QEvent *event) 
{ 
    if (target == this->ui.graphicsViewMainScreen->scene ()) 
    { 
     if (event->type () == QEvent::GraphicsSceneMouseDoubleClick) 
     { 
      QGraphicsSceneMouseEvent *mouseEvent = static_cast<QGraphicsSceneMouseEvent *>(event); 
     } 
    } 
    return false; 
} 

現在,我可以在我的主窗口部件的場面上QGraphicsItem小號檢測雙擊。

相關問題