Перемещение видимой области QGraphicsView

163
28 октября 2018, 03:00

У меня есть класс на основе QGraphicsView. Я хочу сделать так, чтобы по кликам на WASD видимая сцена перемещалась в соответствующую сторону. Задача проста и понятна, написал следующий код:

GameScene::GameScene(QGraphicsScene *scene, QWidget *parent) : QGraphicsView(scene, parent) {
    _scene = scene;
    _resolution = new QPointF(1920, 1080);
    _position = new QPointF(100, 100);
    setSceneRect(_position->x(), _position->y(), _resolution->x(), _resolution->y());
    installEventFilter(this);
    scene->addItem(new QGraphicsLineItem(510, 510, 990, 990)); }
void GameScene::keyPressEvent(QKeyEvent *event) {
    switch (event->key()) {
    case Qt::Key_W:
        _position->setY(_position->y() - 100);
        break;
    case Qt::Key_S:
        _position->setY(_position->y() + 100);
        break;
    case Qt::Key_A:
        _position->setX(_position->x() - 100);
        break;
    case Qt::Key_D:
        _position->setX(_position->x() + 100);
        break;
    default:
        break;
    }
    setSceneRect(_position->x(), _position->y(), _resolution->x(), _resolution->y());
    update(); 
}

Данный код даже работает, но есть одна проблема: сцена не всегда реагирует на функцию setSceneRect (проверил через дебаггер - сигнал доходит, значения в функцию передаются верные), то есть, клавиша нажимается, функция keyPressEvent выполняется, нужный кейс выбирается, значения обновляются, но функция setSceneRect не делает ничего. В чем может быть проблема?

READ ALSO
Чтение русских символов из файла - C++

Чтение русских символов из файла - C++

Не могу понять, в чем проблемаПри чтении русских символов через wifstream из файла в wstring все равно появляются не русские символы, а бред какой-то(где)

215
JAVA(intelliJ idea) проблемы с установкой JDBC?

JAVA(intelliJ idea) проблемы с установкой JDBC?

Развернул на localhost сервер + поставил базу postgreSQLпервая на 8080 вторая на 5432

186
Как заменить getState и getId(из Thread) при исп. Runnable?

Как заменить getState и getId(из Thread) при исп. Runnable?

Я создавал потоки испextends Thread, решил заменить его на Runnable

191
Поддержание подключения с сервером

Поддержание подключения с сервером

Доброго времени суток

190