2010-05-13 3 views
2

Я создаю окно с использованием QWidget и устанавливаю фоновое изображение, когда я запускаю свой код, я не получаю фоновое изображение, но показываю окно с фоном по умолчанию.Фоновое изображение, не показывающееся на QWidget

Может ли кто-нибудь помочь мне в чем может быть причиной.


// In header file 
class STUDY : public QMainWindow, public Ui::STUDYClass 
{ 
    Q_OBJECT 

public: 
    STUDY(QWidget *parent = 0, Qt::WFlags flags = 0); 
    ~STUDY(); 

    QPaintEvent *p2; 

    void backgroundImage(); 
    void paintEvent(QPaintEvent *); 

public slots: 
}; 

//Constructor and paintEvent function in Cpp file 

STUDY::STUDY(QWidget *parent, Qt::WFlags flags) 
: QMainWindow(parent, flags) 
{ 
    setupUi(this); 
    backgroundImage(); 
    update(); 
    paintEvent(p2); 
} 

void STUDY::paintEvent(QPaintEvent *p2) 
{ 
    QPixmap pixmap; 
    pixmap.load(":/STUDY/Resources/Homepage.png"); 
    QPainter paint(this); 
    paint.drawPixmap(0, 0, pixmap); 
    QWidget::paintEvent(p2); 
} 
+0

Как вы устанавливаете backgro и цвет вашего окна? – Naruto

+0

Я загружаю изображение как таблицу стилей в фоновом режиме – Sijith

+0

@sijith Я отправил ответ с примером варианта setStyleSheet в следующем вопросе ... – mosg

ответ

3

Есть много способов, чтобы установить цвет фона окна,

Я дам вам одну простую технику. i.e Переопределить, paintEventQWidget. и нарисуйте там pixmap.

Вот пример кода виджета, я надеюсь, что это помогает

Заголовочный файл

#ifndef QBACKGROUNDIMAGE_H 
#define QBACKGROUNDIMAGE_H 

#include <QtGui/QMainWindow> 
#include "ui_QbackgroundImage.h" 
#include <QtGui> 

class backgroundImgWidget; 

class QbackgroundImage : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    QbackgroundImage(QWidget *parent = 0); 
    ~QbackgroundImage(); 

private: 
    Ui::QbackgroundImage ui; 
}; 

class backgroundImgWidget : public QWidget 
{ 
    Q_OBJECT 

public: 
    backgroundImgWidget(QWidget *parent = 0); 
    ~backgroundImgWidget(); 

protected: 
    void paintEvent(QPaintEvent *p2); 
}; 

#endif // QBACKGROUNDIMAGE_H 

CPP файл

#include "QbackgroundImage.h" 

QbackgroundImage::QbackgroundImage(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    // ui.setupUi(this); 

    backgroundImgWidget* widget = new backgroundImgWidget(); 
    setCentralWidget(widget); 
} 

QbackgroundImage::~QbackgroundImage() 
{ 
} 

backgroundImgWidget::backgroundImgWidget(QWidget *parent):QWidget(parent) 
{ 
} 

backgroundImgWidget::~backgroundImgWidget() 
{ 
} 

void backgroundImgWidget::paintEvent(QPaintEvent *p2) 
{ 
    QPixmap pixmap; 

    pixmap.load(":/new/prefix1/Sunset.jpg"); 

    QPainter paint(this); 
    paint.drawPixmap(0, 0, pixmap); 
    QWidget::paintEvent(p2); 
} 
+0

Спасибо большое Я скомпилировал без ошибок, но проблема не получается изображение на заднем плане. я объявил ту же функцию в классе Для виртуальной функции он нужен, чтобы объявить никакой необходимости использовать функцию обновления – Sijith

+0

добавить изображение в файл .qrc. создайте образец файла qrc, добавьте изображение туда. установите путь к pix-map. – Naruto

+0

мой файл изображения уже присутствует в файле .QRC. Я также проверил его в дизайне QT ..... Как вызвать функцию paintEvent() – Sijith

0

Вы можете переопределить paintEvent:

void Widget::paintEvent(QPaintEvent* e) 
{ 
    QPainter painter(this); 
    painter.drawPixmap(0, 0, QPixmap(":/new/prefix1/picture001.png").scaled(size())); 

    QWidget::paintEvent(e); 
}