gpt4 book ai didi

c++ - mousePressEvent 绑定(bind)不正确?

转载 作者:行者123 更新时间:2023-11-28 01:09:32 28 4
gpt4 key购买 nike

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

我使用矩形来表示每个图 block ,所以我创建了 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();
}

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

Clicked tile (1, 0)

然后,当我单击任何其他图 block 时,我会收到完全相同的消息。消息的内容取决于我先点击哪个图 block 。为什么是这样?我是否错误地绑定(bind)了 mousePressEvent

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

更新 2:我注意到如果我将 event->ignore(); 放在 mesg.exec() 之后,它工作正常.我知道这不是解决方案(因为它可能会导致各种奇怪的行为),但我确实想知道为什么它会起作用。这是否揭示了关于我在实现过程中可能犯的任何错误的任何重要信息?

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

最佳答案

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

关于c++ - mousePressEvent 绑定(bind)不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4136787/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com