当前位置:编程学习 > wap >>

第一次使用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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,