Решение
При настройке положения растрового изображения убедитесь, что оно меньше ширины прямоугольника сцены - шириныpixmap и, если not
, установите положение на zero
.
Примечание: Сделайте аналогичную проверку, если вы двигаетесь в противоположном направлении, то есть установите положениерастровое изображение ширина прямоугольника сцены - ширина растрового изображения , если оно не превышает ширину растрового изображения .
Пример
Вот минимальный пример, который я подготовил для вас, чтобы продемонстрировать, как может быть реализовано предлагаемое решение:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QPixmap pixmap(64, 64);
auto *view = new QGraphicsView(this);
auto *item = new QGraphicsPixmapItem(pixmap);
auto *animation = new QVariantAnimation(this);
view->setScene(new QGraphicsScene(this));
view->setAlignment(Qt::AlignLeft | Qt::AlignTop);
view->setSceneRect(0, 0, 300, 200);
view->scene()->addItem(item);
setCentralWidget(view);
resize(302, 202);
connect(animation, &QVariantAnimation::valueChanged, [view, item](){
int x = item->x();
if (x < (view->sceneRect().width() - item->pixmap().width()))
item->setX(x + 1);
else
item->setX(0);
});
animation->setStartValue(0);
animation->setEndValue(1000);
animation->setDuration(10000);
animation->start();
}
Код более полного примера игры в змеюЯ подготовил доступен на GitHub .