QT基础篇(6)QT5图形与图片

1.QT5位置相关函数

在Qt5中,有一些与位置相关的函数可以帮助您处理窗口和控件的位置。下面是一些常用的位置相关函数:

  1. move(x, y): 将窗口或控件移动到屏幕上的指定位置,其中x和y表示要移动到的坐标。

  2. resize(width, height): 调整窗口或控件的大小,其中width和height表示新的宽度和高度。

  3. geometry(): 返回窗口或控件的几何数据,包括位置和大小。

  4. pos(): 返回窗口或控件的当前位置。

  5. size(): 返回窗口或控件的当前大小。

  6. setGeometry(x, y, width, height): 同时设置窗口或控件的位置和大小。

  7. setFixedSize(width, height): 设置窗口或控件的固定大小,禁止用户调整大小。

  8. mapToGlobal(point): 将窗口或控件坐标系中的点映射到全局坐标系中。

  9. mapFromGlobal(point): 将全局坐标系中的点映射到窗口或控件坐标系中。

这些函数可以帮助您控制窗口和控件的位置和大小,从而实现更好的用户界面布局。

2.QT5基础图形的绘制

在QT5中,可以使用QPainter类来绘制基础图形。下面是一些常见的基础图形绘制操作:

  1. 绘制直线:

    QPainter painter(this);
    painter.drawLine(QPointF(10, 10), QPointF(50, 50));
    

  2. 绘制矩形:

    QPainter painter(this);
    painter.drawRect(QRect(20, 20, 50, 50));
    

  3. 绘制椭圆:

    QPainter painter(this);
    painter.drawEllipse(QRect(20, 20, 50, 50));
    

  4. 绘制圆弧:

    QPainter painter(this);
    painter.drawArc(QRect(20, 20, 50, 50), 0, 180 * 16);
    

  5. 绘制多边形:

    QPainter painter(this);
    QVector<QPoint> points;
    points << QPoint(10, 10) << QPoint(50, 10) << QPoint(50, 50) << QPoint(10, 50);
    painter.drawPolygon(points);
    

  6. 绘制曲线:

    QPainter painter(this);
    QPainterPath path;
    path.moveTo(10, 10);
    path.cubicTo(40, 30, 80, 80, 120, 40);
    painter.drawPath(path);
    

以上代码中, this 表示绘制的目标窗口,可以根据实际情况修改为其他绘制目标。

绘制操作完成后,通过调用 QPainter::end() 方法来结束绘制过程。

3.Qt5 双缓冲机制

在Qt5中,双缓冲机制可以通过使用QWidget::setDoubleBuffered(true)函数来启用。

双缓冲机制是一种绘图优化技术,用于避免屏幕闪烁和绘图锯齿等问题。在双缓冲机制下,绘图操作首先在一个隐藏的缓冲区进行,之后再将整个缓冲区绘制到屏幕上,从而实现平滑的绘图效果。

下面是一个使用双缓冲机制的示例:

#include <QApplication>
#include <QWidget>
#include <QPainter>class MyWidget : public QWidget
{
public:MyWidget(QWidget *parent = nullptr) : QWidget(parent){setDoubleBuffered(true);}protected:void paintEvent(QPaintEvent *event) override{QPainter painter(this);// 在缓冲区绘制图形QPainter bufferPainter(&buffer);bufferPainter.fillRect(rect(), Qt::white);bufferPainter.drawText(rect(), Qt::AlignCenter, "Hello, World!");// 将缓冲区绘制到屏幕上painter.drawImage(rect(), buffer);}private:QImage buffer;
};int main(int argc, char *argv[])
{QApplication app(argc, argv);MyWidget widget;widget.show();return app.exec();
}

在上述示例中,我们通过将缓冲区的图像绘制到屏幕上,来避免直接在屏幕上进行绘图操作。这样可以减少对屏幕资源的频繁访问,以及减少屏幕的闪烁和锯齿效应。

注意,在使用双缓冲机制时,要确保在每次绘图操作后都调用QWidget::update()函数来触发重绘事件,以便将缓冲区的内容绘制到屏幕上。

4.显示QT5 SVG格式图片

在Qt5中,可以使用QSvgWidget来显示SVG格式的图片。以下是一个示例:

#include <QApplication>
#include <QSvgWidget>
#include <QFile>int main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建并设置QSvgWidgetQSvgWidget svgWidget;svgWidget.show();// 加载SVG文件QFile file("image.svg");if (file.open(QIODevice::ReadOnly)){svgWidget.load(&file);file.close();}return app.exec();
}

在上述示例中,通过创建一个QSvgWidget并调用它的load函数来加载SVG文件。你需要将SVG文件的路径指定为正确的位置。一般情况下,SVG文件可以通过QFile类来读取。

运行这段代码后,你应该会看到一个显示SVG图片的窗口。

概念解析:XML

XML(可扩展标记语言)是一种用于表示结构化数据的标记语言。它是一种通用的标记语言,被广泛应用于数据交换和存储。

XML使用标签来描述数据的结构和语义。以下是XML的一些基本特点:

  1. 可扩展性:可以通过定义自己的标记和规则来扩展XML的语义和结构。

  2. 自描述性:XML文档包含了关于其自身结构的信息。它使用标签和属性来描述数据的含义和关系。

  3. 纯文本:XML文档是纯文本文件,因此可以在不同的平台和应用程序之间轻松交换和共享。

  4. 层次结构:XML文档的数据以树状层次结构组织。它由元素、属性、文本节点和注释组成。

以下是使用XML的一些常见应用场景:

  1. 数据交换:XML常用于在不同的应用程序之间交换数据。例如,Web服务使用XML来传输数据。

  2. 配置文件:许多应用程序使用XML作为配置文件格式,以存储应用程序的设置和配置信息。

  3. 数据存储:XML也可以用于将结构化数据存储在文件或数据库中。

在Qt中,可以使用QXmlStreamReader和QXmlStreamWriter类来读取和写入XML文档。这些类提供了一种简单且灵活的方式来解析和生成XML数据。

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

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

相关文章

go切片参数传递用值还是指针

Go 中常用的切片 slice 数据结构是动态数组&#xff0c;切片长度并不固定&#xff0c;在容量不足的时候会自动扩容。 切片实质上是对一个底层数组的抽象视图&#xff0c;由 Go 运行时维护。在运行时&#xff0c;切片由如下的 SliceHeader 结构体表示&#xff0c;其中 Data 字段…

机器人说明书---名词解释030课_python语言_方法重写

这里写自定义目录标题 方法重写类属性与方法类的私有属性类的方法类的私有方法实例类的私有方法实例如下&#xff1a; 类的专有方法&#xff1a;视频讲解 方法重写 如果你的父类方法的功能不能满足你的需求&#xff0c;你可以在子类重写你父类的方法&#xff0c;实例如下&…

【极光系列】springBoot集成Hibernate

【极光系列】springboot集成hibernate gitee地址 直接下载可用 https://gitee.com/shawsongyue/aurora.git 模块&#xff1a;aurora_hibernate mysql安装教程 参考我另外一篇文章&#xff0c;直接下载安装 https://blog.csdn.net/weixin_40736233/article/details/1355829…

数据库负载均衡部署(使用ipvadm ,docker)

文章目录 … 要在Docker中使用IPVS配置MariaDB数据库的高可用集群&#xff0c;并设置VIP地址为192.168.201.4&#xff0c;密码全部设为123456你可以按照以下步骤进行操作&#xff1a; 第一步 创建一个docker网络 docker network create --subnet192.168.200.0/24 mariadb_netw…

FPGA 原理图细节--画引脚

BGA引脚表示 1.1 FPGA此引脚要正确和清晰&#xff0c;会在“Package Pin”中用到次物理接口 1.2, MCU 只用管对应的GPIO逻辑接口就可以了 标识Bank电平 标识出对应Bank的电平&#xff0c;在电路设计中可以清晰的知道对应的脚位输出电平。在"IO std"也方便的选择 Ea…

芯片设计重要工具—— IBM LSF 分布式高性能计算调度平台

IBM Spectrum LSF Suites 是面向分布式高性能计算 (HPC) 的工作负载管理平台和作业调度程序。基于 Terraform 的自动化现已可用&#xff0c;该功能可在 IBM Cloud 上为基于 IBM Spectrum LSF 的集群供应和配置资源。 借助我们针对任务关键型 HPC 环境的集成解决方案&#xff0…

常见的限流算法

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 天下武学出同源 正所谓天下武学殊途同归&#xff…

fgetc函数和fputc函数

目录 getchar和putchargetc和putcfgetc和fputc 橙色 getchar和putchar int getchar(void); // 从标准输入 stdin 获取一个字符&#xff08;一个无符号字符&#xff09;。这等同于 getc 带有 stdin 作为参数int putchar(int char); // 把参数 char 指定的字符&#xff08;一个…

N5181A/安捷伦Agilent N5181A信号发生器

181/2461/8938产品概述&#xff1a; 规格&#xff08;说明书&#xff09;&#xff1a;表示已校准的仪器在工作温度范围0-55C内存放至少2小时&#xff0c;除非另有说明&#xff0c;并经过45分钟预热期后的保证性能。的指标包括测量不确定度。除非另有说明&#xff0c;本文档中的…

【Python数据可视化】matplotlib之绘制高级图形:散点图、热力图、等值线图、极坐标图

文章传送门 Python 数据可视化matplotlib之绘制常用图形&#xff1a;折线图、柱状图&#xff08;条形图&#xff09;、饼图和直方图matplotlib之设置坐标&#xff1a;添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

全自动洗衣机什么牌子好?内衣洗衣机便宜好用的牌子推荐

随着内衣洗衣机的流行&#xff0c;很多小伙伴在纠结该不该入手一款内衣洗衣机&#xff0c;专门来洗一些贴身衣物&#xff0c;答案是非常有必要的&#xff0c;因为我们现在市面上的大型洗衣机只能做清洁&#xff0c;无法对我们的贴身衣物进行一个高度除菌&#xff0c;而小小的内…

基于python的深度神经网络原理与实践

理论基础 什么是神经网络 我们知道深度学习是机器学习的一个分支&#xff0c;是一种以人工神经网络为架构&#xff0c;对数据进行表征学习的算法。而深度神经网络又是深度学习的一个分支&#xff0c;它在 wikipedia 上的解释如下&#xff1a; 深度神经网络&#xff08;Deep N…

Vue中keep-alive缓存的详解(深度理解)

文章目录 一、Keep-alive 是什么二、使用场景三、原理分析四、思考题&#xff1a;缓存后如何获取数据beforeRouteEnteractived 参考文献 一、Keep-alive 是什么 keep-alive是vue中的内置组件&#xff0c;能在组件切换过程中将状态保留在内存中&#xff0c;防止重复渲染DOM ke…

Redis面试系列-03

1. 为什么 Redis 集群的最大槽数是 16384 个&#xff1f; 在redis节点发送心跳包时需要把所有的槽放到这个心跳包中&#xff0c;以便让节点知道当前集群信息&#xff0c;即1638416k&#xff0c;在发送心跳包时使用char进行bitmap压缩后是2k&#xff08;2*8 (8bit)*1024(1k)16K…

五、程序流程结构(1)选择结构——switch语句

作用&#xff1a;执行多条件分支语句 语法&#xff1a; switch (表达式) {case 结果1:执行语句&#xff1b;break;case 结果2:执行语句&#xff1b;break;...default:执行语句&#xff1b;break; //前面代码均未执行&#xff0c;则执行default默认代码 } 1、switch语句给…

四搭建dockerhub私有仓库

搭建dockerhub私有仓库 很多场景下&#xff0c;我们需使用私有仓库管理Docker镜像。相比Docker Hub&#xff0c;私有仓库有以下优势&#xff1a; 节省带宽&#xff0c;对于私有仓库中已有的镜像&#xff0c;无需从Docker Hub下载&#xff0c;只需从私有仓库中下载即可&#x…

MySQL篇—通过Clone插件进行远程克隆数据(第三篇,总共三篇)

在介绍 Clone 最终篇之前&#xff0c;我们先简要回顾一下前面所讲的内容。在第一篇中&#xff0c;我们探讨了 Clone 的用途、使用的前提条件、存在的限制&#xff0c;以及它的备份原理。Clone 是一种用于复制和备份数据的工具&#xff0c;它能够快速高效地创建数据的精确副本。…

Spark原理——逻辑执行图

逻辑执行图 明确逻辑计划的边界 在 Action 调用之前&#xff0c;会生成一系列的RDD,这些RDD之间的关系&#xff0c;其实就是整个逻辑计划 val conf new SparkConf().setMaster("local[6]").setAppName("wordCount_source") val sc new SparkContext(conf)v…

JVM篇--Java内存区域高频面试题

java内存区域 1 Java 堆空间及 GC&#xff1f; 首先我们要知道java堆空间的产生过程&#xff1a; 即当通过java命令启动java进程的时候&#xff0c;就会为它分配内存&#xff0c;而分配内存的一部分就会用于创建堆空间&#xff0c;而当程序中创建对象的时候 就会从堆空间来分…

2024--Django平台开发-Redis集群(十一)

内容回顾 主从复制。 哨兵&#xff1a;实例启动了&#xff0c;哨兵节点没启动&#xff0c;Python通过redis-py连接报错。一定要确保实例节点和哨兵节点都启动了。 搭建集群用的是虚拟机的多台centos服务器&#xff0c;你在跟着学习的时候&#xff0c;一定要全部都是虚拟机&am…