【发布时间】:2010-08-24 01:11:12
【问题描述】:
我有一个 UI 和一个 QGraphicsScene 子类 GraphicsScene,它实现了 mousePressEvent(),但是鼠标点击被忽略了。
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() 未被调用,因此不会发出 clicked() 信号。我还需要设置什么来启用它吗?
更新:
void GraphicsView::mousePressEvent(QMouseEvent *event) {
emit clicked(event->pos());
}
它连接到正确签名的插槽。
【问题讨论】:
-
你将不得不展示你的 GraphicsScene::mousePressEvent,我想。我的猜测是你的函数签名错误,所以你没有像你想象的那样覆盖虚函数。
-
您似乎正在将场景的点击信号连接到某个插槽。那应该是 graphicsView 的点击信号吗?
-
好吧,任何一个都应该工作。我实际上在争论哪个对我的程序更好。然而问题出在 mousePressEvent() 的签名中:正确的 mousePressEvent(QGraphicsSceneMouseEvent *event) 实现了父级的虚函数,而 mousePressEvent(QMouseEvent *event) 没有。美好时光。
标签: c++ qt qt4 qt-creator