前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初学Qt(二) 中高级功能列举

初学Qt(二) 中高级功能列举

作者头像
用户5908113
发布2019-09-30 11:47:05
1.4K0
发布2019-09-30 11:47:05
举报
文章被收录于专栏:Pou光明Pou光明

上一次和大家聊了聊Qt的三大基类,信号和槽的使用以及重新实现一些事件等话题。如果在学习Qt之前有一定的C语言编程,可能对响应界面操作还会有些不习惯。这次聊一聊Qt的中高级功能。

一、高级功能:国 际化、自定义外观、3D画图、创建插件

在C++ GUI Qt 4一书中,将Qt 的国际化也就是动态语言翻译(就是点击中文按钮界面语言变成中文,点击英文按钮界面语言变成英文)、自定义外观也就是样式表、OpenGL 3D画图、Qt插件机制等作为高级功能进行说明。实际开发过程中,这些功能都是交叉使用的,也没有很明显的区分。这次和大家介绍主要是让初学者对Qt的功能有一个初步的认识,用Qt可以实现一些什么功能。

二、中级功能:

布局管理

如果项目对UI美化有比较重要的需求,那么样式表和控件的布局管理就要侧重很多,使用样式表可以做出很多精美的控件,可惜我不咋熟。最后控件布局管理属于基础的需求。

事件处理:①比如当你点击鼠标左键,想弹出一个“祝祖国70华诞快乐”的对画框,可以选择重新实现鼠标点击事件。②安装事件过滤器,主要就是在一个QObject实例接收到事件之前,可以让其他的QObject对象先拦截这个事件,关于事件,还需要更多的去了解。③处理耗时操作,当调用QApplication::exec()时,就已经开启了事件循环。那么如果处理一个事件耗时过多,则UI界面就会卡顿。一般处理方式有两个,第一种是将耗时操作放到线程中进行处理;第二种则是频繁调用QApplication::processEvents()。

二维图形:Qt的二维图形是基于QPainter类的。QPainter既可以绘制几何形状,如点、线、圆、弧形、饼状图、多边形、贝塞尔曲线等,也可以绘制像素映射、图像和文字。此外,Qpainter还支持一些高级特性,像反走样、像素混合、渐变填充和矢量路径等。QPainter也支持线性变换,例如平移、旋转、错切和缩放。QPainter可以在“绘图设备”上,例如QWidget、QPixmap、QImage或者QSvgGenerator。重新实现Qwidget::paintEvent可以用于定制窗口部件的外观,可以指定某一风格的表单或者创建创建一个QStyle的子类。可以使用OPenGL命令来代替QPainter。OpenGL是一个绘制三维图形的标准库,QT里面使用QtOpenGL模块简化了OpenGL代码与Qt应用程序之间的继承。

项目视图:即Model/View,Qt中一种使UI显示和底层数据分离的手段。具体的一些内容可以查看我之前的文章:Model/View简便类和Qt Model/View预定义模型。

输入与输出:从文件或是其他设备读取或写入数据是很常见的功能。Qt中有两个高级的类:QTextStream用来读写文本数据,QDataStream用来读写二进制数据。QFile则使读取单个文件变得容易操作。最后嵌入资源,通过Qt的资源系统来实现,如程序运行的图标图片。通过Qt资源编译器rcc可以将资源转换为C++代码。

数据库:QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口。该接口由利用Qt的Model/View结构将数据库与用户界面集成一套类来提供支持。这里不多做极少。

网络编程:TCP/IP 、UDP、HTTP以及FTP。之前写过使用Qt的类从网页上获取数据,使用的就是HTTP协议。TCP/IP 之前文章写过拆包、组包传输图片的应用。以后有机会把UDP和FTP的例子也补充下。

多线程:防止UI卡死的第二种方式是将耗时操作放到线程中执行,而且多线程的使用也是编程中很重要的一部分。尤其是如何终止一个阻塞的线程,很值得考究。Qt中有两种方式使用多线程。一种是继承QThread重新实现run()函数的方式,注意,这里只有run()内的部分运行在线程中;另一种是使用moveToThread()将需要运行在线程中的部分放在槽函数中,使用该方式比较容易将Socket放入线程中执行。

XML: 可扩展标记语言,是一种常用的数据交换和数据存储的多用途文本文件格式。类似的还有Json文件。刚开始学Qt的我都不知道有这个东西。。这两种文件格式还有很多其他用途,在此不多做介绍。我们可以使用xml文件当做配置文件,使用Json文件也可以。对于一些简单的存储,如ip、端口号等,可以使用QSetting存储。

好了,至此,终于将C++ GUI Qt 4的目录过完了一遍,希望对初学Qt的同志有一些帮助,那我是很快乐的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档