(14)Qt绘图(one)

这篇具有很好参考价值的文章主要介绍了(14)Qt绘图(one)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

绘图的基本使用

绘图的流程

指定绘图设备的两种方式

QPen的使用

线条样式

笔帽样式

线条连接样式

QBrush的使用

画刷样式设置

Qt中的随机数的使用

填充规则

纹理填充(图片填充)

渐变填充

线性渐变

径向渐变

锥形渐变

渐变区域之外的渐变样式(以线性渐变为例)

预定义渐变色的使用

 坐标模式的使用

对象模式的使用

对象模式渐变方向的设置


绘图的基本使用

只要是在QWidget类及其子类中绘图,必须把绘图的操作放到重绘事件

// 绘图事件
void Widget::paintEvent(QPaintEvent *ev)
{
    // 定义画家
    QPainter painter(this);
	// 绘制线条
    painter.drawLine(10, 10, 100, 100);
}

(14)Qt绘图(one),Qt,qt,开发语言,c++

 绘图的流程

  1. 创建栈区画家(QPainter)对象(不需要使用堆区内存,需要使用时再重新定义即可)

  2. 指定绘图设备(一般直接指定在需要绘图的窗口上即可)

  3. 创建画刷或画笔对象(画笔QPen或画刷QBrush

  4. 将画笔或者画刷交给画家

  5. 绘制图形

 指定绘图设备的两种方式

// 直接使用QPainter的构造函数指定
QPainter painter(this);
// 使用成员函数指定
QPainter painter;
painter.begin(this);
// 在begin与end之间进行绘图
painter.end();

QPen的使用

线条样式

QPainter painter(this);

QPen pen;
pen.setStyle(Qt::PenStyle::DashDotDotLine);
pen.setWidth(3);
pen.setColor(Qt::red);
painter.setPen(pen);

painter.drawLine(10, 10, 100, 100);

(14)Qt绘图(one),Qt,qt,开发语言,c++

QPainter painter(this);
for(int i = 0; i <= 6; i++)
{
    QPen pen;
    pen.setStyle(Qt::PenStyle(i));
    pen.setWidth(3);
    pen.setColor(Qt::red);
    painter.setPen(pen);
    painter.drawLine(i * 100, 0, i *100 + 100, 100);
}

(14)Qt绘图(one),Qt,qt,开发语言,c++

笔帽样式

QPainter painter(this);
// 笔帽样式
Qt::PenCapStyle s[] = {Qt::PenCapStyle::SquareCap,
                       Qt::PenCapStyle::FlatCap,
                       Qt::PenCapStyle::RoundCap};
for(int i = 0; i <= 6; i++)
{
    QPen pen;
    pen.setStyle(Qt::PenStyle(i));
    pen.setWidth(30);
    pen.setColor(Qt::red);
    // 设置笔帽样式
    pen.setCapStyle(s[i % 3]);
    painter.setPen(pen);
    // 设置抗锯齿
    painter.setRenderHint(QPainter::RenderHint::Antialiasing);
    painter.drawLine(i * 100, 0, i *100 + 100, 100);
}

(14)Qt绘图(one),Qt,qt,开发语言,c++

线条连接样式

QPainter painter(this);
// 设置抗锯齿
painter.setRenderHint(QPainter::RenderHint::Antialiasing);
// 连接样式
Qt::PenJoinStyle s[] = {Qt::MiterJoin,
                        Qt::BevelJoin,
                        Qt::RoundJoin,
                        Qt::SvgMiterJoin,
                        Qt::MPenJoinStyle};
for(int i = 0; i < 5; i++)
{
    QPen pen;
    pen.setStyle(Qt::PenStyle::SolidLine);
    pen.setWidth(5);
    pen.setColor(Qt::red);
    // 设置笔帽样式
    pen.setJoinStyle(s[i]);
    painter.setPen(pen);
    QPoint points[] = {{20 + i * 100, 30},
                       {50 + i * 100, 60},
                       {100 + i * 100, 10}};
    painter.drawPolygon(points, 3);
}

(14)Qt绘图(one),Qt,qt,开发语言,c++

QBrush的使用

画刷样式设置

Qt::BrushStyle s[] = {Qt::BrushStyle::NoBrush,
                          Qt::BrushStyle::SolidPattern,
                          Qt::BrushStyle::Dense1Pattern,
                          Qt::BrushStyle::Dense2Pattern,
                          Qt::BrushStyle::Dense3Pattern,
                          Qt::BrushStyle::Dense4Pattern,
                          Qt::BrushStyle::Dense5Pattern,
                          Qt::BrushStyle::Dense6Pattern,
                          Qt::BrushStyle::Dense7Pattern,
                          Qt::BrushStyle::HorPattern,
                          Qt::BrushStyle::VerPattern,
                          Qt::BrushStyle::CrossPattern,
                          Qt::BrushStyle::BDiagPattern,
                          Qt::BrushStyle::FDiagPattern,
                          Qt::BrushStyle::DiagCrossPattern,
                          Qt::BrushStyle::LinearGradientPattern,
                          Qt::BrushStyle::ConicalGradientPattern,
                          Qt::BrushStyle::RadialGradientPattern
                          };
int y = 0;
int col = 0;
for(int i = 0; i < 18; i++)
{
    QBrush brush(s[i]);
    // 注意参数3跟4是矩形的宽高,而不是右下角坐标
    painter.fillRect(col++ * 150, y * 150, 150, 150, brush);
    if((i + 1) % 5 == 0) y++, col = 0;
}

(14)Qt绘图(one),Qt,qt,开发语言,c++

 Qt中的随机数的使用

// 头文件
#include <qrandom.h>
// 32位随机数生成
qInfo() << QRandomGenerator::global()->bounded(0, 256);
// 64位随机数生成
qInfo() << QRandomGenerator64::global()->bounded(0, 256);

// 使用宏简化使用方式
#define random(min,max) QRandomGenerator64::global()->bounded(min, max)

填充规则

纹理填充(图片填充)

QBrush brush(QPixmap(":/aaa.png"));
painter.setBrush(brush);
painter.drawRect(0, 0, 480, 460);

(14)Qt绘图(one),Qt,qt,开发语言,c++

渐变填充

线性渐变

QLinearGradient gra(0,0,400,400);  // 指定两个点,控制渐变的方向
// 插值进行颜色的渐变,插值范围[0,1]
gra.setColorAt(0, Qt::red);
gra.setColorAt(1, Qt::green);

painter.setBrush(QBrush(gra));
// 绘制一个矩形
painter.drawEllipse(0,0,400,400);

(14)Qt绘图(one),Qt,qt,开发语言,c++ 

径向渐变

QRadialGradient gra(200,200,200); // 圆心 半径

gra.setColorAt(0, 0xfad0c4);      // 帮助文档有网站可以查看颜色值
gra.setColorAt(1, 0xffd1ff);

painter.setBrush(gra);
painter.drawRect(0,0,400,400);

(14)Qt绘图(one),Qt,qt,开发语言,c++ 

查看Qt帮助文档预定义的渐变色以及相关网站

(14)Qt绘图(one),Qt,qt,开发语言,c++

锥形渐变

QConicalGradient gra(200,200,0); // 圆心 开始角度

gra.setColorAt(0, Qt::red);
gra.setColorAt(0.5, Qt::blue);
gra.setColorAt(1, Qt::green);

painter.setBrush(gra);
painter.drawEllipse(0,0,400,400);

(14)Qt绘图(one),Qt,qt,开发语言,c++

渐变区域之外的渐变样式(以线性渐变为例)

// 默认
QLinearGradient gra(0,0,200,200);
gra.setColorAt(0, Qt::red);
gra.setColorAt(1, Qt::green);

gra.setSpread(QGradient::Spread::PadSpread); // 默认

painter.setBrush(gra);
painter.drawRect(0,0,200,200);
painter.drawRect(200,200,200,200);

(14)Qt绘图(one),Qt,qt,开发语言,c++

QLinearGradient gra(0,0,200,200);
gra.setColorAt(0, Qt::red);
gra.setColorAt(1, Qt::green);

gra.setSpread(QGradient::Spread::RepeatSpread);  // 重复渐变

painter.setBrush(gra);
painter.drawRect(0,0,200,200);
painter.drawRect(200,200,200,200);

(14)Qt绘图(one),Qt,qt,开发语言,c++

QLinearGradient gra(0,0,200,200);
gra.setColorAt(0, Qt::red);
gra.setColorAt(1, Qt::green);

gra.setSpread(QGradient::Spread::ReflectSpread);		// 反向渐变

painter.setBrush(gra);
painter.drawRect(0,0,200,200);
painter.drawRect(200,200,200,200);

(14)Qt绘图(one),Qt,qt,开发语言,c++

 预定义渐变色的使用

// 预定义渐变方式的使用
QGradient gra(QGradient::Preset::AmyCrisp);

painter.setBrush(gra);
painter.drawRect(0,0,width(),height());

(14)Qt绘图(one),Qt,qt,开发语言,c++

 坐标模式的使用

对象模式的使用

//设置坐标模式后不加渐变方向(对象模式就是使用的对象的开始位置到结束位置(0, 0 200, 200))
// 坐标模式的使用
QLinearGradient gra;            // 设置坐标模式后可不加渐变方向
gra.setColorAt(0, 0x89f7fe);
gra.setColorAt(1, 0x66a6ff);

gra.setCoordinateMode(QGradient::ObjectMode);   // 设置坐标模式为对象模式
painter.setBrush(gra);

painter.drawEllipse(0,0,200,200);
painter.drawEllipse(200,0,200,200);
painter.drawEllipse(400,0,200,200);

(14)Qt绘图(one),Qt,qt,开发语言,c++

 对象模式渐变方向的设置

// 设置为对象模式后,渐变方式变为(0,0,1,1) 左上 -> 右下
QLinearGradient gra(0,0,0,1);     // 左上 -> 左下        
gra.setColorAt(0, 0x89f7fe);
gra.setColorAt(1, 0x66a6ff);

gra.setCoordinateMode(QGradient::ObjectMode);   // 设置坐标模式为对象模式
painter.setBrush(gra);

painter.drawEllipse(0,0,200,200);
painter.drawEllipse(200,0,200,200);
painter.drawEllipse(400,0,200,200);

(14)Qt绘图(one),Qt,qt,开发语言,c++文章来源地址https://www.toymoban.com/news/detail-622178.html

到了这里,关于(14)Qt绘图(one)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt】Qt 开发环境安装 ( Qt 版本 5.14.2 | Qt 下载 | Qt 安装 )

    Qt 开发环境下载地址 : https://download.qt.io/archive/qt/ 该界面可以下载 Qt 各个版本的开发环境 ; Qt 版本选择 , Qt 的各个大版本都在同步更新 , 如 5.1 , 5.9 , 5.14 , 6.0 等 , 每个版本都有不同的性能和功能 , 每个版本进入后的二级目录的小版本 , 尽量选择最新的版本 ; 如进入 5.14 目录后

    2024年02月14日
    浏览(65)
  • Qt | Qt For Android、Qt5.14.2安卓开发环境搭建详细步骤

    1、简介 搭建Qt For Android开发环境需要安装的软件有: JAVA SDK Android SDK Android NDK 其中Android NDK直接下载的压缩包,解压即可。 Android SDK提供了安装包和压缩包,用哪个都行。 Qt For Android开发环境的搭建说简单也简单,说复杂也比较复杂。说它简单是因为安装的软件就一两个,安

    2024年02月02日
    浏览(49)
  • 08-3_Qt 5.9 C++开发指南_Graphics View绘图架构

    采用QPainter 绘图时需要在绘图设备的 paintEvent()事件里编写绘图的程序,实现整个绘图过程。这种方法如同使用 Windows 的画图软件在绘图,绘制的图形是位图,这种方法适合于绘制复杂性不高的固定图形,不能实现图件的选择、编辑、拖放、修改等功能。 Qt 为绘制复杂的可交

    2024年02月13日
    浏览(42)
  • 14-5_Qt 5.9 C++开发指南_基于HTTP 协议的网络应用程序

    Qt 网络模块提供一些类实现 OSI 7 层网络模型中高层的网络协议,如 HTTP、FTP、SNMP等,这些类主要是 QNetworkRequest、QNetworkReply和QNetworkAccessManager。 QNetworkRequest 类通过一个URL 地址发起网络协议请求,也保存网络请求的信息,目前支持 HTTP、FTP 和局部文件 URLs的下载或上传。 QNe

    2024年02月13日
    浏览(51)
  • QT qt 3d 绘图

    首先不得不说,要感谢北京邮电大学的阿科。感谢他慷慨的分享和极具科学态度的记录,将自己搜集到的众多资料收集整理发布,拯救众多苦逼寻找方案的程序员于苦海之中。因为最近接手新的项目,涉及到使用opengl做surface plot编程。第一个想到的就是能否使用现有的开源

    2024年02月02日
    浏览(37)
  • QT支持多种开发语言

    QT主要是一个C++应用程序框架,但它也提供了对其他一些编程语言的官方或非官方支持。以下是QT支持的一些语言版本及其特点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.Python (PyQt)  : PyQt是QT的官方Python绑定,允许Python开发者使用QT库来创建

    2024年04月29日
    浏览(48)
  • 14-3_Qt 5.9 C++开发指南_QUdpSocket实现 UDP 通信_UDP 单播和广播

    UDP(User Datagram Protocol,用户数据报协议)是轻量的、不可靠的、面向 数据报 (datagram) 、无连接的协议,它可以用于对可靠性要求不高的场合。与 TCP 通信不同, 两个程序之间进行 UDP 通信无需预先建立持久的 socket 连接,UDP 每次发送数据报都需要指定目标地址和端口 (如图14-6

    2024年02月14日
    浏览(45)
  • 【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月10日
    浏览(76)
  • QT窗体绘图QPainter

    QPainter INSCODE AI 创作助手: QPainter是Qt中的一个类,用于在窗口、图像或其他用户界面上绘制图形和文本。它提供了一些方便的方法来画线、矩形、圆、多边形和文本 QPainter绘图函数 INSCODE AI 创作助手: QPainter是Qt中一个用于绘图的类,它提供了一系列的绘图函数。以下是一些

    2024年02月05日
    浏览(37)
  • Qt 多次绘图

    使用Qt 的时候发现: 背景:自己定义一个类,把它和某个ui文件绑定。(类似 Qt creator 默认创建的工程) 问题:当鼠标在窗口内单击的时候会触发2次绘图。?难道不应该是一次吗? 于是开始了如下的测试: 创建 qt creator 默认带有ui的工程。 重写 paintevent 虚函数,利用静态变

    2024年01月24日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包