Я создаю игру, требующую перемещения qgraphicspixmapitem в представлении.
Теперь я планирую перемещать мой QGraphicsPixmapitem вверх и вниз с помощью клавиатуры.Первоначально работает отлично.
Но так как размер моей сцены и вида неодинаков, это выглядит довольно странно.Поэтому я добавил несколько функций, чтобы отрегулировать размер моей сцены и вида так, чтобы они были одинаковыми.
Однако после установки одинакового размера моих QGraphicsScene и QGraphicsView я больше не могу перемещать свой qgraphicspixmapitem с помощью клавиатуры.
Я попытался добавить setFocus, Flag чтобы мой qgraphicspimapitem оставался под контролем моей клавиатуры, но напрасно.
Любая идея будет высоко оценена.Спасибо!
главное окно.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),
ui(new Ui::MainWindow)
{
//scene
scene = new QGraphicsScene(0, 0, 1050, 600);
//player
player = new QGraphicsPixmapItem(QPixmap(":/img/whitedog.png").scaled(100,100));
player->setFlag(QGraphicsPixmapItem:: ItemIsFocusable,true);
player->setFocus();
player->setPos(350, 500);
scene->addItem(player);
playertimer->start(10);
//view
view = new QGraphicsView(this);
view ->setScene(scene);
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setCentralWidget(view);
view->setFixedSize(1055,605);
}
void MainWindow::keyPressEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_Down){
player->setPos(player->x(),player->y()+10);
}
else if (e->key() == Qt::Key_Up){
player->setPos(player->x(),player->y()-10);
}
}
}
главное окно.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsPixmapItem>
#include <QKeyEvent>
#include <QtGui>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
virtual void keyPressEvent(QKeyEvent *e);
private:
Ui::MainWindow *ui;
QGraphicsScene *scene;
QGraphicsItem *player;
QGraphicsView * view;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}