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

2019-09-30 11:47:05 浏览数 (1)

上一次和大家聊了聊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的同志有一些帮助,那我是很快乐的。

0 人点赞