Как я могу переместить QGraphicsPixmapItem, который достигает правого (конца) graphicView в левую (начальную) сторону (как то, что происходит в игре со змеями) - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть виджет QGraphicsView, который отображает элемент растрового изображения.Пользователь может переместить элемент.Когда элемент достигает правого (или левого) конца графического вида, я бы хотел, чтобы элемент входил с другой стороны (с той же координацией X и Y (как это происходит в игре со змеями)

1 Ответ

0 голосов
/ 25 сентября 2018

Решение

При настройке положения растрового изображения убедитесь, что оно меньше ширины прямоугольника сцены - ширины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 .

...