Qt背景平铺
QT实现窗口平铺的方式有3种
1、drawTiledPixmap
利用该接口可以在给定的矩形内重复绘制图片
void QPainter::drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())
参数1:绘制的矩形范围
参数2:绘制的图片
参数3:在矩形中的哪个点开始绘制
重写绘图事件,如下:
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>class Widget : public QWidget
{Q_OBJECTpublic: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
画刷的构造函数接受一张图片,可以直接变为图片画刷
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>class Widget : public QWidget
{Q_OBJECTpublic: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对应的图片就行了,就会自动平铺满
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr): QWidget(parent){this->setAttribute(Qt::WA_StyledBackground);this->setStyleSheet("background-image:url(:/sugar.png);");}~Widget()=default;};
#endif // WIDGET_H