qt 移动事件调用move出现坐标抖动的问题
时间: 2023-09-27 07:12:37 浏览: 131
在Qt中,当你使用move()函数移动QGraphicsItem对象时,可能会出现坐标抖动的问题。这是由于move()函数传递的坐标是整数,而QGraphicsItem对象的位置是浮点数,导致移动的位置不完全匹配。
为了解决这个问题,你可以使用setPos()函数来移动QGraphicsItem对象。这可以确保移动的位置是浮点数,并避免坐标抖动的问题。
以下是一个示例代码,它使用setPos()函数来移动一个圆形QGraphicsEllipseItem对象,避免了坐标抖动的问题。
```cpp
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsEllipseItem>
#include <QTimer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// Create a scene and view
QGraphicsScene scene;
QGraphicsView view(&scene);
// Create a circle item
QGraphicsEllipseItem *circle = new QGraphicsEllipseItem(0, 0, 50, 50);
circle->setBrush(Qt::red);
scene.addItem(circle);
// Create a timer to move the circle
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, [&]() {
qreal speed = 1.0; // pixels per frame
circle->setPos(circle->pos() + QPointF(speed, speed));
});
timer.start(10);
view.show();
return a.exec();
}
```
在此示例中,我们使用setPos()函数来移动圆形QGraphicsEllipseItem对象的位置。在QTimer的timeout信号中,我们使用QPointF来表示移动的距离,并将其添加到圆形对象的当前位置中。这可以确保移动的距离是浮点数,并避免坐标抖动的问题。
请注意,此示例中的速度值为1像素/帧,你可以根据需要调整此值。
阅读全文