mousePressEvent无法正确绑定?

时间:2010-11-09 17:47:49

标签: c++ events qt qgraphicsview

为了熟悉Qt的图形视图,我在Qt中实现了一个简单的棋盘。目前没有棋子。

我使用矩形来表示每个图块,因此我创建了BoardTile类(继承自QGraphicsRectItem),以便我可以定义mousePressEvent

这是一个与鼠标点击相关联的测试代码:

void BoardTile::mousePressEvent(QGraphicsSceneMouseEvent *event) {
    QMessageBox mesg;
    std::stringstream mesgText;
    mesgText << "Clicked tile (" << this->row_id << ", " << this->col_id << ").";
    mesg.setText(QString::fromStdString(mesgText.str()));
    mesg.exec();
}

当我点击第二行的第一个图块时,我收到以下消息:

  

点击图块(1,0)

然后,当我点击任何其他图块时,我会得到完全相同的消息。消息的内容取决于我先点击的任何一个瓷砖。为什么是这样?我是否错误地绑定了mousePressEvent

完整代码 http://www.box.net/shared/4m6nrvuxa4 (更新1)

更新2 :我注意到如果我将event->ignore();放在mesg.exec()之后,它就可以了。我知道这不是一个解决方案(因为它可能会导致各种奇怪的行为),但我确实想知道为什么这样做。这是否揭示了我在实施过程中可能出现的任何错误?

更新3 :有人告诉我,我应该尝试将mousePressEvent更改为mouseReleaseEvent。奇怪的是,这很有效。据我所知,这两个事件之间的唯一区别是,当您按下鼠标按钮时会触发第一个事件,而当您释放该按钮时触发后者。那么为什么mouseReleaseEvent触发了所需的行为而mousePressEvent没有?

1 个答案:

答案 0 :(得分:3)

当您执行this->x_id时,您将获得RECT的x位置,而不是鼠标点击。你必须从事件中取event->::pos()。文档为here