2010-08-23 89 views
2

我有一個UI和一個QGraphicsScene子類GraphicsScene實現mousePressEvent(),但鼠標點擊被忽略。QGraphicsScene子類忽略鼠標按下事件

ui->setupUi(this); 
scene = new GraphicsScene(this); 
scene->addPixmap(QPixmap::fromImage(someImage)); 
ui->graphicsView->setScene(scene); 
connect(scene, SIGNAL(clicked(QPoint)), this, SLOT(someSlot(QPoint))); 

GraphicsScene :: mousePressEvent()不被調用,所以不會發出signal clicked()。還有什麼我需要設置啓用它?

UPDATE:

void GraphicsView::mousePressEvent(QMouseEvent *event) { 
     emit clicked(event->pos()); 
} 

它連接到正確的簽名的插槽。

+0

你將不得不出示GraphicsScene :: mousePressEvent,我想。我的猜測是你的函數簽名是錯誤的,所以你不會像你認爲的那樣重寫虛函數。 – moswald 2010-08-23 16:55:17

+0

好吧,想來... – CakeMaster 2010-08-23 16:59:31

+0

看來你正在將場景的點擊信號連接到某個插槽。應該是graphicsView的點擊信號? – 2010-08-23 17:14:16

回答

1

mos是正確的功能簽名。該功能應該是:

void GraphicsView::mousePressEvent(QGraphicsSceneMouseEvent *event) { 
     emit clicked(event->pos()); 
} 

而不是

void GraphicsView::mousePressEvent(QMouseEvent *event) { 
     emit clicked(event->pos()); 
} 
+0

很高興你發現了這個問題! – rubenvb 2010-08-23 19:55:33

+0

是的,非常感謝您的幫助。 – CakeMaster 2010-08-24 00:34:22