2013-12-14 4 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 являются created - one - это экранный объект (scr), который является подклассом QGraphicsView и там fore - объект QGraphicsView, а другой объект (view), который вы назначили «new» в конструкторе экрана.

Вы устанавливаете атрибут сцены второго, но никогда не показываете его или ничего не делаете с ним. Вы видите первый, который отображается на экране (так как это тот, который вы вызываете show() внутри main()), но поскольку вы никогда не устанавливаете атрибут сцены, он остается пустым/белым.

Простейшим решением является избавление от ненужного второго объекта QGraphicsView. Я изменил конструктор сцены к этому:

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

... и, сделав это, теперь программа отображает красное окно, которое можно было бы ожидать.

Смежные вопросы