代码之家  ›  专栏  ›  技术社区  ›  Sijith

Qwidget上未显示背景图像

  •  2
  • Sijith  · 技术社区  · 15 年前

    我正在用设计一个窗口 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 回复  |  直到 10 年前
        1
  •  3
  •   p.i.g.    10 年前

    有很多方法可以将背景色设置为窗口,

    我给你一个简单的技巧。即超控, 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);
    }
    
        2
  •  1
  •   p.i.g.    10 年前

    你可以重新实现 paintEvent :

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