飞机离开scene框之后,需要把它清除。
#include <QTimer>
#include "bullet.h"
#include <QGraphicsScene>
Bullet::Bullet()
{
setRect(0, 0, 10, 50);
QTimer *timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(move()));
timer->start(50);
}
void Bullet::move() {
setPos(x(), y()-10);
if (pos().y()+rect().height() < 0) {
scene()->removeItem(this);
delete this;
}
}
#include <QApplication>
#include <QGraphicsScene>
#include "myrect.h"
#include <QGraphicsView>
/*
* Tutorial Topics:
* -event (keyPressEvent() and QkeyEvent)
* -event propogation system
* -QDebug
*/
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// create a scene
QGraphicsScene *scene = new QGraphicsScene();
// create an item to put into the scene
MyRect *player = new MyRect();
player->setRect(0, 0, 100, 100);
// make rect focusable
player->setFlag(QGraphicsItem::ItemIsFocusable);
player->setFocus();
// add the item to the scene
scene->addItem(player);
// add a view to visualize the scene
QGraphicsView *view = new QGraphicsView(scene);
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->show();
view->setFixedSize(800, 600);
scene->setSceneRect(0, 0, 800, 600);
player->setPos(view->width()/2, view->height() - player->rect().height());
return a.exec();
}