首页 > 解决方案 > 为 qframe 设置背景图片

问题描述

实际上我有 2 个问题......我正在尝试为窗口设置背景图片并为其提供完整的窗口大小,即使我将其最大化并且我有一个 qframe,我正在尝试将另一张图片设置为它的背景。我面临的是窗口的背景图片在最大化时不会占用窗口的大小,并且qframe的图片根本没有出现这是我的代码和结果图片

QPixmap bkgnd("./Qt_logo_2016.svg.png");
bkgnd = bkgnd.scaled(this->size(), Qt::IgnoreAspectRatio);
QPalette palette;
palette.setBrush(QPalette::Background, bkgnd);
this->setPalette(palette);

QPixmap bkgnd1("./Background.png");
bkgnd1 = bkgnd1.scaled(this->size(), Qt::IgnoreAspectRatio);
palette.setBrush(QPalette::Background, bkgnd1);
ui->widget->setPalette(palette);

在此处输入图像描述

标签: qt

解决方案


更好的方法:对于窗口(或小部件),最好覆盖绘制事件函数,这样您就不需要重新缩放图片。

void MainWindow::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    painter.drawImage(this->rect(),QImage("windowImage.png"));

    QMainWindow::paintEvent(e);

}

Frame 也是一样,创建一个继承自 QFrame 的类并覆盖绘制事件函数

头文件:

#pragma once

#include <QFrame>
#include <QPainter>

class CFrame : public QFrame
{
    Q_OBJECT

public:
    explicit CFrame(QWidget *parent = nullptr);
    void paintEvent(QPaintEvent *) override;


};

cp:

#include "cframe.h"

CFrame::CFrame(QWidget *parent) : QFrame(parent)
{

}

void CFrame::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);

    painter.drawImage(this->rect(),QImage("frameImage.png"));

    QFrame::paintEvent(e);

}

将您正在使用的 QFrame 提升为 CFrame ;)


推荐阅读