Фоновое изображение не отображается на QWidget - PullRequest
2 голосов
/ 13 мая 2010

Я проектирую окно, используя 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);
}

Ответы [ 2 ]

3 голосов
/ 13 мая 2010

Есть много способов установить цвет фона для окна,

Я дам вам одну простую технику.то есть Override, paintEvent из QWidget.и нарисуйте там растровое изображение.

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

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

#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);
}
1 голос
/ 30 января 2014

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

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

    QWidget::paintEvent( e );
}
...