我有一个基于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
函数不执行任何操作。可能是什么问题?