第一次使用QGraphicsItem 帮我看看出了什么问题
我只是做了个大概功能没有完善 但是已经出现问题了 想建立两个类 一个是键盘控制左右移动的 一个是QTimer控制移动的#ifndef ROAD_H
#define ROAD_H
#include<QGraphicsScene>
#include<QDateTime>
#include"myCar.h"
class Road:public QGraphicsScene
{
public:
Road();
private slots:
void addOppositer();
//protected:
// void keyPressEvent(QKeyEvent *event);
private:
QDateTime time;
QTimer *timer;
int i;
};
#endif // ROAD_H
#include"Road.h"
#include"myCar.h"
#include"oppositeCar.h"
#include<QtGui>
#include<QTimer>
#include<QTime>
Road::Road()
{
i=0;
myCar *mycar=new myCar;
addItem(mycar);
timer=new QTimer(this);
time=QDateTime::currentDateTime();
connect(timer,SIGNAL(timeout()),this,SLOT(addOppositer()));
// connect(timer,SIGNAL(timeout()),,SLOT(advance()));
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
timer->start(300);
if(QDateTime::currentDateTime().secsTo(time)>500)
timer->stop();
}
void Road::addOppositer()
{
oppositeCar *oppositecar=new oppositeCar;
addItem(oppositecar);
}
这里这个oppositecar建立不出来 mycar那个项已经显示出来了 但是不能动 说是Object::connect: No such slot QGraphicsScene::addOppositer()
#ifndef MYCAR_H
#define MYCAR_H
#include<QGraphicsItem>
class myCar:public QGraphicsItem
{
public:
myCar();
QRectF boundingRect() const;
QPainterPath shape()const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
protected:
void keyPressEvent(QKeyEvent *event);
//protected:
// void advance(int phase);
private:
int i;
};
#endif // MYCAR_H
#include"myCar.h"
#include<QGraphicsScene>
#include<QPainter>
#include<QtGui>
myCar::myCar()
{
i=0;
setPos(-15+15*i,100);
setFlag(ItemIsMovable);
}
QRectF myCar::boundingRect() const
{
return QRectF(-20,-20,40,40);
}
QPainterPath myCar::shape() const
{
QPainterPath path;
path.addRect(-20,-20,40,40);
return path;
}
void myCar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setBrush(Qt::yellow);
painter->setPen(Qt::NoPen);
painter->drawRect(-20,-20,40,40);
}
void myCar::keyPressEvent(QKeyEvent *event)
{
if (event->key()==Qt::Key_Right)i=i+1;
if(i>1)i=1;
if(event->key()==Qt::Key_Left)i=i-1;
if(i<-1)i=-1;
update();
}
这是mycar那个类 画个简单的矩形 但是按键盘不能动 可以拖
#ifndef OPPOSITECAR_H
#define OPPOSITECAR_H
#include<QGraphicsItem>
class oppositeCar:public QGraphicsItem
{
public:
oppositeCar();
QRectF boundingRect()const;
QPainterPath shape()const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
//protected:
// void advance(int phase);
void move();
//private:
// QTimer *timer;
};
#endif // OPPOSITECAR_H
#include"oppositeCar.h"
#include<QGraphicsItem>
#include<QtGui>
oppositeCar::oppositeCar()
{
setPos(mapToParent(-15,50));
}
QRectF oppositeCar::boundingRect() const
{
return QRect(-20,-20,40,40);
}
QPainterPath oppositeCar::shape() const
{
QPainterPath path;
path.addRect(-20,-20,40,40);
return path;
}
void oppositeCar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setBrush(Qt::black);
painter->setPen(Qt::red);
painter->drawRect(-20,-20,40,40);
}
这个项直接不出现 QGraphics Qt --------------------编程问答-------------------- 可能是因为graphicsview把该事件拦截了
补充:移动开发 , Qt