【问题标题】:QGraphicsScene subclass is ignoring mouse press eventsQGraphicsScene 子类忽略鼠标按下事件
【发布时间】: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


【解决方案1】:

mos 关于函数签名是正确的。函数应该是:

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

而不是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2013-11-07
    • 2021-06-01
    • 1970-01-01
    • 2014-08-27
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多