
QT实现窗口平铺的方式有3种
1、drawTiledPixmap
利用该接口可以在给定的矩形内重复绘制图片
void QPainter::drawTiledPixmap(
const QRectF &rectangle,
const QPixmap &pixmap,
const QPointF &position = QPointF())
参数1:绘制的矩形范围
参数2:绘制的图片
参数3:在矩形中的哪个点开始绘制
重写绘图事件,如下:
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr): QWidget(parent)
{
}
~Widget()=default;
protected:
//重写绘图事件
void paintEvent(QPaintEvent* ev) override
{
QPainter p(this);
p.drawTiledPixmap(this->rect(),QPixmap(":/sugar.png"));
}
};
#endif // WIDGET_H
2、利用画刷
画刷的类型可以指定为Qt::TexturePattern
画刷的构造函数接受一张图片,可以直接变为图片画刷
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr): QWidget(parent)
{
}
~Widget()=default;
protected:
//重写绘图事件
void paintEvent(QPaintEvent* ev) override
{
QPainter p(this);
QPixmap pix(":/sugar.png");
QBrush brush(pix);
//指定图片画刷
p.setBrush(brush);
//图片会重复填充这个矩形
p.drawRect(this->rect());
}
};
#endif // WIDGET_H
3、利用background-image
qss样式表,可以指定背景平铺
只需要指定background-image对应的图片就行了,就会自动平铺满
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr): QWidget(parent)
{
this->setAttribute(Qt::WA_StyledBackground);
this->setStyleSheet("background-image:url(:/sugar.png);");
}
~Widget()=default;
};
#endif // WIDGET_H