博客
关于我
Qt知识: 画刷风格
阅读量:795 次
发布时间:2023-03-03

本文共 3375 字,大约阅读时间需要 11 分钟。

一、摘要

绘制背景需要使用painter和画刷(qbrush)共同完成。painter和画笔、画刷之间存在容器关系,即在painter中可以生成或选择brush。需要注意的是,画笔和画刷是两个不同的工具,画笔主要用于绘制线性图形,而画刷则适用于填充面形区域,如背景设置。本文将重点介绍画刷的种类设置,包括系统内置的画刷风格和用户自定义画刷的方法。

二、Qt提供的画刷风格

2.1 风格示例

系统提供的不同纹理背景如何设置?以下为示例供参考:

  • 实心图案:无图案(NoBrush)和实心图案(SolidPattern)。
  • 密实图案:密实图案1(Dense1Pattern)到密实图案7(Dense7Pattern)。
  • 线图案:水平线图案(HorPattern)和垂直线图案(VerPattern)。
  • 复杂图案:十字线图案(CrossPattern)、左斜线图案(BDiagPattern)、右斜线图案(FDiagPattern)、倾斜十字线图案(DiagCrossPattern)。
  • 渐变图案:线性渐变图案(LinearGradientPattern)、径向渐变图案(RadialGradientPattern)、锥形渐变图案(ConicalGradientPattern)、纹理图案(TexturePattern)。

2.2 画刷属性设置

在程序实现中,画刷属性设置可以通过以下方法完成:

// 设置颜色
setColor(QColor color);
// 设置风格
setStyle(Qt.BrushStyle style);
// 设置纹理图案
setTexture(QPixmap pixmap);
setTextureImage(QImage image);
// 设置变换矩阵
setTransform(QTransform transform);

2.3 画刷的生成方法

画刷的生成方法包括以下几种:

  • QBrush()
  • QBrush(Qt.BrushStyle)
  • QBrush(Union[QColor, Qt.GlobalColor, QGradient], Qt.BrushStyle)
  • QBrush(QPixmap)
  • QBrush(QImage)
  • QBrush(Union[QBrush, QColor, Qt.GlobalColor, QGradient])

3. Qt.TexturePattern 自定义图像画刷

如果需要使用图片作为背景,需要自定义画刷模式。以下是线性渐变、径向渐变和锥形渐变的实现方法。

3.1 线性渐变(QLinearGradientPattern)

线性渐变的实现步骤如下:

QLinearGradient gradient;
gradient.setStart(200, 200);
gradient.setEnd(300, 300);
gradient.setColorAt(0.2, Qt.red);
gradient.setColorAt(0.8, Qt.green);
gradient.setColorAt(1.0, Qt.blue);
QBrush brush(gradient);

3.2 径向渐变(QRadialGradientPattern)

径向渐变的实现步骤如下:

QRadialGradient gradient;
gradient.setCenter(350, 350);
gradient.setRadius(50);
gradient.setColorAt(0.0, Qt.red);
gradient.setColorAt(1.0, Qt.blue);
QBrush brush(gradient);

3.3 锥形渐变(QConicalGradientPattern)

锥形渐变的实现步骤如下:

QConicalGradient gradient;
gradient.setCenter(450, 450);
gradient.setAngle(0.0);
gradient.setColorAt(0.0, Qt.red);
gradient.setColorAt(1.0, Qt.blue);
QBrush brush(gradient);

4. 示例代码

以下是一个完整的示例代码,展示了如何在Qt中使用不同类型的画刷:

#include 
#include
#include
#include
#include
#include
class Demo : public QWidget { Q_OBJECT public: Demo() { resize(600, 600); brush1 = QBrush(Qt.SolidPattern); brush2 = QBrush(Qt.Dense6Pattern); brush2.setColor(Qt.red); gradient1 = QLinearGradient(200, 200, 300, 300); gradient1.setColorAt(0.2, Qt.red); gradient1.setColorAt(0.8, Qt.green); gradient1.setColorAt(1.0, Qt.blue); brush3 = QBrush(gradient1); gradient2 = QRadialGradient(350, 350, 50, 350, 350); gradient2.setColorAt(0.0, Qt.red); gradient2.setColorAt(1.0, Qt.blue); brush4 = QBrush(gradient2); gradient3 = QConicalGradient(450, 450, 0); gradient3.setColorAt(0.0, Qt.red); gradient3.setColorAt(1.0, Qt.blue); brush5 = QBrush(gradient3); brush6 = QBrush(Qt.TexturePattern); brush6.setTexture(QPixmap("images/大象.png")); } void paintEvent(QPaintEvent event) { QPainter painter(this); painter.setBrush(brush1); painter.drawRect(0, 0, 100, 100); painter.setBrush(brush2); painter.drawRect(100, 100, 100, 100); painter.setBrush(brush3); painter.drawRect(200, 200, 100, 100); painter.setBrush(brush4); painter.drawRect(300, 300, 100, 100); painter.setBrush(brush5); painter.drawRect(400, 400, 100, 100); painter.setBrush(brush6); painter.drawRect(500, 500, 100, 100); } }; int main() { QApplication app(sys.argv); Demo demo; demo.show(); return app.exec_(); }

5. 程序效果

通过上述代码,可以在窗体中绘制不同类型的背景图案。以下是程序的具体效果:

  • 实心图案:绘制实心色块。
  • 密实图案:绘制密实风格的色块。
  • 线图案:绘制水平线和垂直线图案。
  • 渐变图案:绘制线性渐变、径向渐变和锥形渐变的色块。
  • 纹理图案:绘制自定义图像背景。
  • 通过以上方法,可以轻松创建丰富多样的背景图案,满足不同的设计需求。

    转载地址:http://scxfk.baihongyu.com/

    你可能感兴趣的文章
    Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别
    查看>>
    Position属性四个值:static、fixed、absolute和relative的区别和用法
    查看>>
    POSIX thread编程中关于临界区内条件变量的分析
    查看>>
    POSIX与程序可移植性
    查看>>
    posix多线程有感--自旋锁
    查看>>
    SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
    查看>>
    POSIX标准和XSI扩展
    查看>>
    post install error,please remove node_moules before retry
    查看>>
    postcss-pxtorem 参数之selectorBlackList、exclude的用法
    查看>>
    Postek博思得标签打印机更换电脑,打印出来标签空白
    查看>>
    postfix+ dovecot搭建邮件服务器
    查看>>
    postfix在邮件服务器中的使用
    查看>>
    PostGIS 3.1.2软件安装详细教程(地图工具篇.8)
    查看>>
    PostGIS中获取所有EPSG的编码以及对应Proj4字符串
    查看>>
    SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
    查看>>
    PostGIS在Windows上的下载与安装
    查看>>
    Qt开发——网络编程之UDP客户端
    查看>>
    postgis数据库优化_postgresql 性能优化
    查看>>
    postgis求面积、交集等相关函数
    查看>>
    postgis相关函数
    查看>>