【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.3 初始化数据

news2024/11/14 10:55:32

本节对应的视频讲解:B_站_视_频

https://www.bilibili.com/video/BV1qd4y1s7xk


布局完成后,就可以修改控件的名称,以及添加初始化数据

1. 变量命名

先修改各控件显示的的名称,做到 “见名知义”,方便写代码

修改完控件名称后的效果如下:

image-20221206125232160


2. 初始化数据

为各个控件添加 初始化数据


2.1 形状

为 cboShape 控件,添加形状

首先,在 paintwidget.h 中定义一个枚举类型,表示形状的类型,如下:

enum Shape {
    _Point,         //
    _Line,          //

    _Rect,          //
    _RoundedRect,   //
    _Ellipse,       //

    _Polyline,      //
    _Polygon,       //

    _Arc,           //
    _Pie,           //
    _Chord,         //

    _Path,          //

    _Text,          //
    _Pixmap
};

然后,在 widget.cpp 的构造中,添加如下初始化代码:

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 1. 形状
    ui->cboShape->addItem("Point", static_cast<int>(_Point));
    ui->cboShape->addItem("Line", static_cast<int>(_Line));

    ui->cboShape->addItem("Rectangle", static_cast<int>(_Rect));
    ui->cboShape->addItem("Rounded Rectangle", static_cast<int>(_RoundedRect));
    ui->cboShape->addItem("Ellipse", static_cast<int>(_Ellipse));

    ui->cboShape->addItem("Arc", static_cast<int>(_Arc));
    ui->cboShape->addItem("Pie", static_cast<int>(_Pie));
    ui->cboShape->addItem("Chord", static_cast<int>(_Chord));

    ui->cboShape->addItem("Polyline", static_cast<int>(_Polyline));
    ui->cboShape->addItem("Polygon", static_cast<int>(_Polygon));

    ui->cboShape->addItem("Path", static_cast<int>(_Path));

    ui->cboShape->addItem("Text", static_cast<int>(_Text));
    ui->cboShape->addItem("Pixmap", static_cast<int>(_Pixmap));
}

2.2 画笔

初始化画笔的属性

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 2. 线宽
    ui->sbPenWidth->setRange(1, 10);

    // 3. 线型
    // 3.1 线型-实线、虚线、点画线等
    ui->cboPenStyle->addItem("Solid", static_cast<int>(Qt::SolidLine));
    ui->cboPenStyle->addItem("Dash", static_cast<int>(Qt::DashLine));
    ui->cboPenStyle->addItem("Dot", static_cast<int>(Qt::DotLine));
    ui->cboPenStyle->addItem("Dash Dot", static_cast<int>(Qt::DashDotLine));
    ui->cboPenStyle->addItem("Dash Dot Dot", static_cast<int>(Qt::DashDotDotLine));
    ui->cboPenStyle->addItem("None", static_cast<int>(Qt::NoPen));

    // 3.2 线型-线的端点的样式
    ui->cboPenCap->addItem("Flat", static_cast<int>(Qt::FlatCap));
    ui->cboPenCap->addItem("Square", static_cast<int>(Qt::SquareCap));
    ui->cboPenCap->addItem("Round", static_cast<int>(Qt::RoundCap));

    // 3.3 连接-两根线的连接处的样式
    ui->cboPenJoin->addItem("Miter", static_cast<int>(Qt::MiterJoin));
    ui->cboPenJoin->addItem("Bevel", static_cast<int>(Qt::BevelJoin));
    ui->cboPenJoin->addItem("Round", static_cast<int>(Qt::RoundJoin));
}

2.3 画刷

初始化画刷的属性

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    // 4. 画刷
    ui->cboBrushStyle->addItem(tr("Linear Gradient"), static_cast<int>(Qt::LinearGradientPattern));
    ui->cboBrushStyle->addItem(tr("Radial Gradient"), static_cast<int>(Qt::RadialGradientPattern));
    ui->cboBrushStyle->addItem(tr("Conical Gradient"), static_cast<int>(Qt::ConicalGradientPattern));
    ui->cboBrushStyle->addItem(tr("Texture"), static_cast<int>(Qt::TexturePattern));
    ui->cboBrushStyle->addItem(tr("Solid"), static_cast<int>(Qt::SolidPattern));
    ui->cboBrushStyle->addItem(tr("Horizontal"), static_cast<int>(Qt::HorPattern));
    ui->cboBrushStyle->addItem(tr("Vertical"), static_cast<int>(Qt::VerPattern));
    ui->cboBrushStyle->addItem(tr("Cross"), static_cast<int>(Qt::CrossPattern));
    ui->cboBrushStyle->addItem(tr("Backward Diagonal"), static_cast<int>(Qt::BDiagPattern));
    ui->cboBrushStyle->addItem(tr("Forward Diagonal"), static_cast<int>(Qt::FDiagPattern));
    ui->cboBrushStyle->addItem(tr("Diagonal Cross"), static_cast<int>(Qt::DiagCrossPattern));
    ui->cboBrushStyle->addItem(tr("Dense 1"), static_cast<int>(Qt::Dense1Pattern));
    ui->cboBrushStyle->addItem(tr("Dense 2"), static_cast<int>(Qt::Dense2Pattern));
    ui->cboBrushStyle->addItem(tr("Dense 3"), static_cast<int>(Qt::Dense3Pattern));
    ui->cboBrushStyle->addItem(tr("Dense 4"), static_cast<int>(Qt::Dense4Pattern));
    ui->cboBrushStyle->addItem(tr("Dense 5"), static_cast<int>(Qt::Dense5Pattern));
    ui->cboBrushStyle->addItem(tr("Dense 6"), static_cast<int>(Qt::Dense6Pattern));
    ui->cboBrushStyle->addItem(tr("Dense 7"), static_cast<int>(Qt::Dense7Pattern));
    ui->cboBrushStyle->addItem(tr("None"), static_cast<int>(Qt::NoBrush));
}

经过以上的初始化操作,效果如下:

效果


3. 添加资源文件

由于后边有绘制图片,以及将图片作为画刷的填充,因此这里先把图片作为资源添加到工程中来

首先,将包含两种图片文件 brick.png 和 qt-logo.png 的 images 文件夹,拷贝到项目目录下

然后,在项目名称右键,选择 “添加新文件…”,创建一个 painter.qrc 的资源文件:

image-20221207110044703

添加之后的效果,如下:

资源文件效果

添加完毕之后,就可以直接在代码中引用这两个图片了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言开发《推箱子游戏》,亲自手把手教会大家

【C语言经典算法100道实战题】适合具备C语言基础语法的同学学习&#xff0c;提高编写程序的逻辑思维能力和算法设计能力专门精心设计。100个经典的算法供大家练习及配套对应的录播视频。为我们今后学习其它的编程语言和软件开发打下坚实的基础&#xff0c;让你在编码道路上如鱼…

【手把手】教你玩转消息中间件之RabbitMQ

1、微服务下现存的各种问题 服务调用问题 当两个服务调用时&#xff0c;可以通过传统的HTTP方式&#xff0c;让服务A直接去调用服务B的接口&#xff0c;但是这种方式是同步的方式&#xff0c;虽然可以采用SpringBoot提供的Async注解实现异步调用&#xff0c;但是这种方式无法…

gsva gsea ssgsea gaochao 使用GSVA方法计算某基因集在各个样本的表现

傻傻分不清!GSEA & GSVA有啥差别?史上最全教程来了! - 知乎 (zhihu.com) 文章发表于2013年,GSVA: gene set variation analysis for microarray and RNA-Seq data 同样是broad 研究生出品,其在2005年PNAS发表的gsea已经高达1.4万的引用了,不过这个GSVA才不到300。 G…

【边缘检测】基于模糊算法的图像边缘检测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步进步&#xff0c;matlab项目目标合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信息&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算…

实时数仓Flink生产环境部署+提交作业【步骤】

文章目录1、基础环境2、开发环境2.1、pom.xml2.2、log4j.properties2.3、测试用的代码2.3.1、Kafka工具2.3.3、Flink执行环境工具2.3.3、测试Flink读写Kafka2.3.4、测试FlinkSQL读写Kafka2.4、打包后上传到服务器3、生产环境3.1、Flink安装3.2、Flink on YARN下3种模式3.2.1、S…

Linux下POSIX信号量以及基于环形队列的生产消费模型

目录 一、POSIX信号量介绍 1. 信号量原理 2&#xff0c;初始化信号量 3,信号量销毁 4&#xff0c;信号量等待 5,发布信号量 二&#xff0c;基于环形队列的生产消费模型 1.基于单线程 2&#xff0c;测试&#xff1a; 3&#xff0c;基于多线程 4,测试 三&#xff0c;代…

故障转移,服务发现,负载均衡所运用的连接池

没错&#xff0c;说的就是连接池&#xff0c;玩互联网架构&#xff0c;连接池是必须要掌握的。 什么是连接池&#xff1f; 创建与管理连接缓冲池的技术&#xff0c;本质是资源复用&#xff0c;不用频繁创建与销毁连接&#xff0c;能提高性能。 画外音&#xff1a;数据库连接池…

Sentinel-2 L2A数据导入ENVI

Sentinel-2 L2A数据导入ENVI前言0 首先对SNAP进行设置1 用SNAP对Sentinel-2数据重采样2 在ENVI中打开重采样后的Sentinel-2数据3 其实不用重采样也行&#xff0c;ENVI可以直接打开解压后的Ssentinel-2文件&#xff0c;只需要将解压后的MTD_MSIL2A.xml拖进ENVI即可前言 Sentine…

揭秘倚天实例背后的硬核实力

2022云栖大会&#xff0c;阿里巴巴宣布自研CPU倚天710已大规模应用&#xff0c;阿里云未来两年20%的新增算力将使用自研CPU。11月15日&#xff0c;倚天710云实例上线并正式进入大规模应用阶段&#xff0c;现已应用于阿里巴巴集团核心业务&#xff0c;并服务科学研究、智能手机行…

[附源码]JAVA毕业设计天津城建大学校友录管理系统(系统+LW)

[附源码]JAVA毕业设计天津城建大学校友录管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

Nvidia力作:医学图像分割网络

来源&#xff1a;投稿 作者&#xff1a;梦飞翔 编辑&#xff1a;学姐 引自Unetr: Transformers for 3d medical image segmentation 1.序言 本文将以Nvidia团队最近提出的一种新的医学图像分割网络作为切入点&#xff0c;结合所用开源数据集&#xff0c;为各位同学提供一份从…

杨校老师课堂之Spring框架面试题【开发工程师面试前必看】

1.spring 中都用到了哪些设计模式?2.spring 中有哪些核心模块?3.说一下你理解的 IOC 是什么?4.spring 中的 IOC 容器有哪些?有什么区别?5.那 BeanFactory 和 FactoryBean 又有什么区别?6.Repository、Service、Compent、Controller它们有什么区别?7.那么 DI 又是什么?8…

C#学习笔记一 委托、事件

C# 委托、事件 1、Action委托、Func委托 namespace DelegateExample {class Program{static void main(string[] args){Calculator calculatornew Calculator();//Action委托Action Calnew Action(calculator.Report);//直接调用函数Calculator.Report();//通过委托调用函数Ca…

艾美捷RPMI-1640培养基含L-谷氨酰胺的功能和研究

Roswell Park Memorial Institute (RPMI) 1640 培养基起初是为了悬浮培养人白血病单层细胞而开发的。RPMI 1640 培养基被发现适用于多种哺乳动物细胞&#xff0c;包括 HeLa 细胞、Jurkat 细胞、MCF-7 细胞、PC12 细胞、PBMC 细胞、星形胶质细胞和癌细胞。针对广泛的细胞培养应用…

阿里影业的稳健业绩来源:科技+内容塑造韧性,应对市场变化

随着《阿凡达&#xff1a;水之道》&#xff08;简称&#xff1a;《阿凡达2》&#xff09;预售佳绩的显现&#xff0c;电影业的复苏已然箭在弦上。 12月7日&#xff0c;《阿凡达2》正式开启预售&#xff0c;灯塔专业版数据显示&#xff0c;其预售开启4小时后&#xff0c;总票房…

【工作随笔】验证经验、维度

背景&#xff1a;目前负责模块的验证工作基本进展完毕&#xff0c;包括所有功能验证、场景覆盖、用例编写调试和仿真、功能覆盖率收集、sva检测时序等&#xff0c;在当前的进度上和开发、验证同时对我的工作进行了评审。 问题&#xff1a;在评审中间讨论到一个当前tc实现的问题…

五、卷积神经网络CNN7(图像卷积与反卷积)

图像卷积 首先给出一个输入输出结果那他是怎样计算的呢&#xff1f; 卷积的时候需要对卷积核进行 180 的旋转&#xff0c;同时卷积核中心与需计算的图像像素对齐&#xff0c;输出结构为中心对齐像素的一个新的像素值&#xff0c;计算例子如下&#xff1a;这样计算出左上角(即第…

基于Dijkstra和A算法的机器人路径规划附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

JAVA SCRIPT设计模式--行为型--设计模式之Observer观察者模式(19)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

Python图像识别实战(一):实现按比例随机抽取图像移动到另一文件夹

前面我介绍了可视化的一些方法以及机器学习在预测方面的应用&#xff0c;分为分类问题&#xff08;预测值是离散型&#xff09;和回归问题&#xff08;预测值是连续型&#xff09;&#xff08;具体见之前的文章&#xff09;。 从本期开始&#xff0c;我将做一个关于图像识别的…