2013-12-14 45 views
2

我是使用Qt的初学者,我遇到了问题。我想使用QGraphicsView和QGraphicsScene显示红色背景。而不是红色,我仍然显示白色。我不知道,问题存在的地方。从Qt开始 - QGraphicsView和QGraphicsScene

MainWindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QGraphicsView> 
#include <QGraphicsScene> 
#include <QBrush> 

class Screen:public QGraphicsView 
{ 
Q_OBJECT 

public: 
    Screen(); 
}; 

#endif // MAINWINDOW_H 

MainWindow.cpp

#include "mainwindow.h" 

Screen::Screen() 
{ 

    QGraphicsView *view = new QGraphicsView(this); 
    QGraphicsScene *scene = new QGraphicsScene(); 
    QBrush redBrush(Qt::red); 

    scene->setBackgroundBrush(redBrush); 
    view->setScene(scene); 
} 

Main.cpp的

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    Screen scr; 
    scr.show(); 

    return a.exec(); 
} 

回答

2

与您发布的代码的问题是存在的,有两种不同的QGraphicsView对象是创建 - 一个是Screen对象(scr),它是QGraphicsView的子类fore是一个QGraphicsView对象,另一个是在Screen构造函数中用'new'分配的(view)对象。

您正在设置第二个场景属性,但从不显示或使用它。你看到第一个显示在屏幕上(因为这是你在main()里面调用show()的那个,但是因为你从来没有设置它的场景属性,所以它仍然是空白/白色。

最简单的修复方法是摆脱不必要的第二个QGraphicsView对象。我改变了这个场景构造函数:

Screen::Screen() 
{ 
    QGraphicsScene *scene = new QGraphicsScene(); 
    scene->setBackgroundBrush(Qt::red); 
    setScene(scene); 
} 

...并做了这些,程序现在显示您所期望的红色窗口。

相关问题