首页 > 解决方案 > 移动 QGraphicsView 的可见区域

问题描述

我有一个基于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函数(通过 debagger 信号到达检查,值正确发送到函数),即按下键,keyPressEvent执行函数,选择所需的情况,更新值,但该setSceneRect函数不执行任何操作。可能是什么问题呢?

标签: c++qt

解决方案


推荐阅读