qt - 为 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);
解决方案
更好的方法:对于窗口(或小部件),最好覆盖绘制事件函数,这样您就不需要重新缩放图片。
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 ;)
推荐阅读
- python - 尝试修复 AutoClicker 错误“没有名为图像的模块”
- angular - 如何动态分页 PrimeNG DataView?
- javascript - 获取具有多个子对象的 JavaScript 对象的特定值
- javascript - 创建带页脚的谷歌文档
- c - 致命错误:openssl/opensslconf.h:没有这样的文件或目录
- .net - 你能假设总是有一个 Windows 临时文件夹吗?
- hazelcast - Hazelcast 是否在 jmx 中无限期地持有锁?
- web-component - 在 Web 组件中不使用保留的公共名称的正确方法是什么
- swift - MLMediaLibrary - 显示照片库 - Swift 代码错误 - macOS
- function - 在 Dataweave 1.0 中创建全局函数