前提描述:
1、窗口类SimuLinkLib (class SimuLinkLib : public QMainWindow),用UI(Designer)创建的;
2、再SimuLinkLib中拖入了一个部件:QGraphicsView::graphicsView;
3、在SimuLinkLib.cpp的构造函数中添加了QGraphicsScene::blockScene,如下所示;
//创建绘图场景
blockScene = new QGraphicsScene();
//将场景设置为:左上角的坐标为(0,0),长宽为(600,1200)
blockScene->setSceneRect(0, 0, 6000,1200);
//将blockScene放入view中显示
ui->graphicsView->setScene(blockScene);
//初始化时,让view显示scene(0,0)处
ui->graphicsView->centerOn(0, 0);
//graphicsView开启鼠标跟踪:鼠标没有按下也会接收鼠标移动事件
ui->graphicsView->setMouseTracking(true);
4、然后在SimuLinkLib.cpp中添加鼠标事件,如下代码所示;
void SimuLinkLib::mousePressEvent(QMouseEvent *event)
{
//鼠标点击blockScene中Item获取其Item的指针
QGraphicsItem* currentPixmapItem = this->blockScene->focusItem();
QGraphicsSceneEvent* mouseEvent = (QGraphicsSceneEvent*)event;
qDebug() << "event->type():" << mouseEvent->type();
//QGraphicsPixmapItem* currentPixmapItem = static_cast<QGraphicsPixmapItem*>(this->blockScene->focusItem());
qDebug() << "QMouseEvent::左键点击了" << currentPixmapItem ;
qDebug() << "QMouseEvent::场景是否活动" << this->blockScene->isActive();
}
运行结果:
1、当鼠标点击QGraphicsPixmapItem::pixmapItem时,函数mousePressEvent(QMouseEvent *event)没有被调用;
2、当鼠标点击QGraphicsScene::blockScene空白处时,函数mousePressEvent(QMouseEvent *event)被调用了;
问题:该如何点击QGraphicsPixmapItem::pixmapItem能调用了鼠标事件函数呢?这样我就能获取焦点处的QGraphicsPixmapItem::pixmapItem的指针了。(但是前提是不用自定义写继承自QGraphicsScene的场景类)