QT学习笔记之绘图
或许有人会等你到天黑,但是你不该在天黑后再找他(她)。
1.绘图事件
在ui文件中添加一个按钮,同时在资源文件中添加一个名字为1.jpg的图片。
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,[=](){update();//如果手动调用绘图事件,用update()更新,以前使用repaint()});//将按钮点击与更新图片关联,每次点击按钮,图片向x方向移动20
}void Widget::paintEvent(QPaintEvent *)
{// QPainter painter(this);//1.创建画家对象,this指定画图设备// // painter.setBrush(QBrush(Qt::Dense1Pattern));//设置封闭图形填充样式// painter.setBrush(QBrush(QColor(250,249,222),Qt::SolidPattern));//设置填充格式和颜色// QPen pen;//创建画笔对象// pen.setColor(QColor(165,42,42));//设置画笔颜色// pen.setStyle(Qt::DotLine);//设置画笔风格// pen.setWidth(2);//设置画笔颜色// painter.setPen(pen);//让画家对象使用画笔对象// painter.drawLine(QPoint(0,0) , QPoint(0,100));//画线// painter.drawChord(QRect(500,200,800,600),480,1920);//画弦// painter.drawRect(10,20,30,80);//画矩形// painter.drawText(1000,500,"暗红色是红色降低纯度形成的一种色彩,纯度较低决定了这种色彩本来红色的一些特性的弱化。");//画文本// painter.drawEllipse(QPoint(100,70),40,40);//画圆,椭圆// QPainter painter(this);//2.创建画家对象,this指定画图设备// painter.drawEllipse(QPoint(100,100),50,50);//画圆,// painter.setRenderHint(QPainter::Antialiasing,true);//设置抗锯齿能力,提高精细度,绘图效率降低// painter.drawEllipse(QPoint(200,200),50,50);//画圆// painter.drawRect(300,300,50,50);//正方形// painter.translate(300,0);//移动画家对象// painter.save();//记录画家对象的状态,包括位置// painter.drawRect(300,300,50,50);// painter.translate(300,0);// painter.restore();//将画家状态还原到上一个保存点(位置)// painter.drawRect(300,300,50,50);//该正方形与上一个正方形重叠QPainter painter(this);//3.创建画家对象,this指定画图设备posX+=20;//每次更新,posX加20,可以放到connect函数的lambda中if(posX>this->width())//如果图片的起点x坐标大于窗口宽度,将posx置零{posX=0;}painter.drawPixmap(posX,100,320,200,QPixmap(":/1.jpg"));//画图片,图片起点坐标为(posX,100),宽320,高200}Widget::~Widget()
{delete ui;
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *);int posX=0;
private:Ui::Widget *ui;
};
#endif // WIDGET_H
2.绘图设备
绘图设备是指继承 QPainterDevic,的子类。Qt一共提供了四个这样的类,分别是 QPixmap、
QBitman、QImage和 QPicture。其中:
QPixmap,专门为图像在屏幕上的显示做了优化。Bitmap是 Pixmp,的一个子类,它的色深限定为1,可以使用 QPixmp的QBitmap()函数来确定这个 QPixmp是不是一个 QBitmap。QImege专门为图像的像素级访问做了优化。QPieture则可以记录和重现 QPainter的各条命令。
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QPicture>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// //QPixmap绘图设备,专门为平台做了显示的优化// QPixmap pix(300,300);//创建一块300×300的QPixmap对象// pix.fill(Qt::white);//将对象颜色填充为白色// QPainter painter(&pix);//创建画家对象,并将设置pix设置为绘图板// painter.setPen(QPen(Qt::cyan));//设置画笔颜色// painter.drawEllipse(QPoint(150,150),50,50);//以pic中心为原点画圆// pix.save("E:\\pix.png");//保存到E盘// //QImage绘图设备,可以对像素进行访问// QImage ima(300,300,QImage::Format_ARGB32);//创建一块300×300的对象// ima.fill(Qt::white);// QPainter painter(&ima);//创建画家对象,并将设置pix设置为绘图板// painter.setPen(QPen(Qt::cyan));//设置画笔颜色// painter.drawEllipse(QPoint(150,150),50,50);//以pic中心为原点画圆// ima.save("E:\\pix.jpg");//保存到E盘//QPicture绘图设备 可以记录和重现绘图指令QPicture pic;QPainter painter;painter.begin(&pic);//开始往pic上画painter.setPen(QPen(QColor(0,255,0)));painter.drawEllipse(QPoint(150,150),100,100);painter.end();//结束绘图pic.save("E:\\pic.zt");//保存到E盘
}
void Widget::paintEvent(QPaintEvent *event)
{
// QPainter painter(this);
// QImage ima;//利用QImage对像素进行修改
// ima.load(":/1.jpg");//加载图片
// ima.setDevicePixelRatio(5);//告知QPainters对象,在被绘制的目标上用几个物理像素来绘制1个逻辑像素。// for(int i=50;i<200;i++)
// {
// for(int j=50;j<200;j++)
// {
// QRgb value =qRgb(0,0,255);
// ima.setPixel(i,j,value);
// }//修改像素点// }
// painter.drawImage(0,0,ima);
//QPainter painter(this);//重现QPicture绘图指令QPicture pic;pic.load("E:\\pic.zt");painter.drawPicture(0,0,pic);
}Widget::~Widget()
{delete ui;
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *event);//绘图事件
private:Ui::Widget *ui;
};
#endif // WIDGET_H相关文章:
QT学习笔记之绘图
或许有人会等你到天黑,但是你不该在天黑后再找他(她)。 1.绘图事件 在ui文件中添加一个按钮,同时在资源文件中添加一个名字为1.jpg的图片。 widget.cpp #include "widget.h" #include "ui_widget.h" #incl…...
大数据新视界 --大数据大厂之数据清洗工具 OpenRefine 实战:清理与转换数据
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
基于QT的C++中小项目软件开发架构源码
描述 基于QT信号槽机制实现类之间的交互调用通信,适用于使用不同枚举作为消息交互的类型场景,支持附带任意参数,代码使用方式参考前一篇文章 特性 代码简洁,不超过100行仅需包含一个头文件Communicator.h,需要通信的…...
self-supervised, weakly supervised, and supervised respectively区别
Self-supervised learning(自监督学习)、weakly supervised learning(弱监督学习)和supervised learning(监督学习)是机器学习中的不同学习范式,它们的主要区别如下: 一、监督学习&…...
安卓好软-----手机屏幕自动点击工具 无需root权限
工具可以设置后自动点击屏幕。可以用于一些操作。例如自动刷视频等等哦 工具介绍 一款可以帮你实现自动操作的软件。软件中你可以根据实际需要设置点击位置,可以是屏幕上的特定位置,也可以是按钮或控件。功能非常强大,但是操作非常简单&…...
【Redis】主从复制(下)--主从复制原理和流程
文章目录 主从复制原理主从节点建立复制流程图数据同步 psyncpsync的语法格式 psync运行流程全量复制全量复制的流程全量复制的缺陷有磁盘复制 vs 无磁盘复制 部分复制部分复制的流程复制积压缓冲区 实时复制 主从复制原理 主从节点建立复制流程图 保存主节点的信息从节点(sla…...
Pencils Protocol上线 Vaults 产品,为 $DAPP 深入赋能
Pencils Protocol 是 Scroll 生态一站式综合收益平台,该平台以 DeFi 功能作为抓手,基于 Farming、Vaults、Auction 等功能不断向 LRT、LaunchPad、AI、FHE、RWA 等领域深入的拓展。 近期 Pencils Protocol 生态不断迎来重磅进展,一个是 $DAPP…...
uni-app+vue3+pina实现全局加载中效果,自定义全局变量和函数可供所有页面使用
首先自定义一个加载中组件 ccloading.vue <template><view class"request-loading-view" v-if"loadingShow"><view class"loading-view"><image class"loading-img" :src"loading" mode"aspectF…...
基于SSM+小程序的在线课堂微信管理系统(在线课堂1)(源码+sql脚本+视频导入教程+文档)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 &emsp1、管理员实现了首页、个人中心、用户管理、课程分类管理、课程信息管理、课程订阅管理、课程视频管理、公告栏管理、留言板管理、系统管理。 2、用户实现了首页、课程信息、公…...
Uniapp 微信小程序 最新 获取用户头像 和 昵称 方法 有效可用
文章目录 前言代码实现运行效果技术分析 前言 同事有个需求 授权获取用户头像 和 昵称 。之前做过线上小程序发版上线流程 就实现了下 最新的方法和 api 有些变化 记录下 代码实现 先直接上代码 <template><view class"container"><buttonclass&qu…...
儿童手抄报模板-200个(家有神兽必备)
在这个充满色彩与想象的世界里,每一位小朋友都是一位小小艺术家和梦想家。作为家长或老师,我们总是希望能为他们的学习生活增添一抹亮色,激发他们的创造力与探索欲。今天,就为大家带来一份超级实用的资源——儿童手抄报模板-200个…...
动态规划入门题目->使用最小费用爬楼梯
1.题目: 2.解析: 做题模式: 步骤一:找状态转移方程 步骤二:初始化 步三:填表 步骤四:返回-> dp[n] dp[i]表示到达 i 位置最小花费 逻辑:要爬到楼顶先找到 i 位置 , 要…...
中间添加一条可以拖拽的分界线,来动态调整两个模块的宽度
在 React 中操作 DOM 元素时,使用 document.querySelector 以及全局事件监听(如 addEventListener)并不推荐,因为这些方法无法与 React 的生命周期很好地协调,可能会导致内存泄漏或影响性能。 可以改为使用 useRef 和…...
C++的vector优化
1、C中的动态数组一般是特指vector类 2、vector需要优化的原因之一是当我们push_back元素到数组中时,如果原来分配给动态数组的内存不够用了,那么就会找一块更大的内存空间分配给数组,把旧的内容复制到新的内存中去,这就是导致程…...
基于飞腾平台的OpenCV的编译与安装
【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…...
pyside6与协程
目录 一、常见错误 错误一、使用协程函数作为槽函数。 错误二、在Qt循环中创建新的loop 二、解决方法: ①安装库qasync ②修改Qt入口 ③异步槽函数 ④异步函数 ⑤整体示例 一、常见错误 错误一、使用协程函数作为槽函数。 这样是肯定是不行ÿ…...
手机如何五开玩梦幻西游端游?用GameViewer远程手机免费畅玩梦幻西游
用手机就能免费玩梦幻西游端游,还可以随时查看挂机进度! 想要实现这一点,就用网易GameViewer远程,而且不光手机可以玩梦幻西游端游,平板也能免费玩,并为你实现五开玩梦幻西游端游。 那么,通过Ga…...
【笔记】X射线物理基础
一、X射线衍射分析简史 1895年X射线发现 1896 年 2 月对骨折的观察:G.和 E. Frost是第一个使用 X 射线进行医疗用途 1897 年法国海关官员的行李扫描。 X射线衍射理论1 X射线衍射理论2 元素的特征X射线 X射线光电子的应用 电磁波的粒子属性 X射线层析成像法 X-ray…...
Vue3与Flask后端Demo
文章目录 准备工作Flask 后端设置Vue3 前端设置跨域问题测试 准备工作 安装开发环境 安装 Python(推荐 Python 3.8 或更高版本)。安装 Node.js(推荐 LTS 版本)。安装 PyCharm(用于 Flask 开发)和 VSCode&am…...
第一本RAG书籍《大模型RAG实战》出版!
随着ChatGPT的爆火,推动了新一轮的AI技术进步。但大模型自身存在幻觉、知识更新难等问题,阻碍了其直接进行落地应用。RAG(Retrieval-Augmented Generation)技术将LLM与文本信息检索相结合,解决了在一些场景下模型知识不…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
