2011-06-14 8 views
1

체스와 같은 장면을 만들기 위해 qgraphicsview qgraphicsitem을 사용하려고합니다.QGraphicsScene에 아무 것도 표시되지 않습니다.

나는 그것을 만들려고하는 공식적인 예를 따르고 있지만 아무 것도 표시되지 않습니다. 코드는 꽤 똑같습니다. 처음에는 Cell 클래스가 궁금합니다. 그래서 저는 직사각형을 그려 봅니다. 그러나 아무것도 표시되지 않습니다. 아래는 내 코드, 누군가 나를 도울 수 있습니다. 나는 Cell.h

Windows 7에서

class Cell : public QGraphicsItem 
{ 
    //Q_OBJECT; 

public: 
    Cell(const QColor &color,int x, int y); 
    QRectF boundingRect() const; 
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); 
private: 
    int x,y; 
public: 
    QColor color; 
protected: 
    void mousePressEvent(QGraphicsSceneMouseEvent *event); 
}; 

Cell.cpp

Cell::Cell(const QColor &color, int x, int y) 
{ 
    this->x=x; 
    this->y=y; 
    this->color=color; 
    setAcceptedMouseButtons(Qt::LeftButton); 

} 

QRectF Cell::boundingRect() const 
{ 
    return QRectF(0,0,30,15); 
} 

void Cell::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 


    QBrush b=painter->brush(); 
    painter->setBrush(QColor::fromRgb(0,0,255)); 
    painter->drawRect(0,0,30,15); 
    painter->fillRect(this->boundingRect(),QColor::fromRgb(0,0,255)); 
    painter->setBrush(b); 
    return; 
} 

void Cell::mousePressEvent(QGraphicsSceneMouseEvent *event) 
{ 
    QGraphicsItem::mouseMoveEvent(event); 
    this->color=QColor::fromRgb(0,0,0); 
    update(); 

} 

view.h

class View : public QFrame 
{ 
    Q_OBJECT 

public: 
    QGraphicsView *getview() const; 

public: 
    View(QWidget *parent); 
private: 
    QGraphicsView *graphicsView; 
}; 

view.cpp

View::View(QWidget *parent) 
    :QFrame(parent) 
{ 
    graphicsView = new QGraphicsView; 
    graphicsView->setRenderHint(QPainter::Antialiasing, false); 
    graphicsView->setOptimizationFlags(QGraphicsView::DontSavePainterState); 
    graphicsView->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate); 
} 

QGraphicsView *View::getview() const 
{ 
    return graphicsView; 
} 
을 Qt는 4.7을 사용하고 있습니다 ,451,515,

mainwindow.h

class MainWindow : public QWidget 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private: 
    void populateScene(); 

    QGraphicsScene *scene; 
}; 

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) : 
    QWidget(parent) 
{ 
    populateScene(); 
    View *v=new View(0); 
    v->getview()->setScene(scene); 

    QHBoxLayout *layout = new QHBoxLayout; 
    layout->addWidget(v); 
    setLayout(layout); 
} 

MainWindow::~MainWindow() 
{ 
} 

void MainWindow::populateScene() 
{ 
    scene=new QGraphicsScene(); 
    for(int x=0;x<30;x++) 
    { 
     for(int y=0;y<20;y++) 
     { 
      QGraphicsItem *item=new Cell(QColor::fromRgb(0,255,255),30,15); 
      item->setPos(QPointF(30,15)); 
      scene->addItem(item); 
     } 
    } 
} 

MAIN.CPP

QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    return a.exec(); 

답변

2

귀하의 QFrame이 아닌 "자신의"를 QGraphicsView 않습니다. 따라서 내부에보기를 표시 할 이유가 없습니다. 그렇지 않으면

graphicsView = new QGraphicsView(this); 

그리고 창 크기를 조정하는 것을 잊지 마세요 (또는 코드에서 최소 크기를 설정), 당신이 didn를 생각할 수 있습니다 :

단지와

graphicsView = new QGraphicsView; 

교체 't work =)

+0

대단히 감사합니다. 현재 작동합니다. –

관련 문제