Qt框架简介

2022-08-29 10:45:56 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

这里的Qt不是指Qt语音平台,而是指GUI框架。

截止至2020年8月,Qt的最新版本是5.15.0,但仍有很多资料是基于Qt4,为了避免大家误入歧途,所以写了这篇文章。

Qt一开始是由奇趣公司开发的,后来被Nokia收购了,然后再被Digia收购了。所以有的人会误以为Qt就是为了塞班系统而生,是个落伍的产物。

但是很多嵌入式软件、桌面工具都是用Qt来开发的,包括Quartus和Cadence也有用到Qt。

诚然,Qt也是类似于C#、JAVA那样,专门用来开发图形界面的,那么Qt有哪些特别的地方呢?以下,一一介绍。

1、Qt能在哪些平台使用?

这里的平台是指操作系统,不是指CPU。Qt可以在Windows、Linux、Android、iOS、mac OS、QNX、VxWorks下使用。

把Linux移植到ARM上,也是能跑Qt开发出来的软件的。

2、Qt是开源的,还是收费的?

是开源的,需要遵循LGPL或GPL协议。

3、Qt是使用什么语言开发的?

建议底层用C 做业务逻辑,上层用QML做图形界面。也可以纯C 开发,但是做界面时会比较累。

4、什么是Qt Quick,什么是QML,两者有什么关系?

Qt Quick只是一种技术名称,它本身不指代任何语言,但是,当别人说到Qt Quick一般是指用QML快速开发图形界面。

QML是一种类似于CSS和JAVA Script的混合语言,语法非常简单易学,适合没什么编程经验的人。

5、什么是Qt Creator?

Qt Creator是Qt官方的IDE,专门用Qt框架开发图形界面的。

6、除了Qt Creator,还有什么IDE可以用?

目前比较流行的是Visual Studio,简称VS。Qt Creator一安装好就能使用,但是VS是需要自己设置才可以用。

这里要特别注意的:VS使用的是msvc编译器,Qt Creator使用的是Mingw 32编译器,这两个编译器编译出来的库并不通用。

7、Qt Creator的原生编辑器有Vi / Vim模式吗?

有,叫Fake Vim,按照下图设置即可。

8、新手入门应该学哪个版本的Qt?

应该学最新的Qt5,推荐教材《Qt Creator快速入门》、《Qt Quick核心编程》、《Qt及QtQuick开发实战精解》,以及官方自带的英文文档。

9、哪里能找到Qt的官方文档?

打开Qt Creator,如下图,Help,就是了。

有某些方法,文档上并没有写,但是实际上是存在的。这时需要利用代码补全。

10、什么是pyQt?

pyQt是指用python脚本语言来调用Qt框架,从而快速开发图形界面。但是商业使用pyQt,是要收费的。

pyQt4请看《PyQt编程指南》。pyQt5请看《PyQt5快速开发与实战》、《Qt5/PyQt5实战指南》、《Python Qt GUI与数据可视化编程》、《pyQt5参考手册》、《PyQt5 tutorial》。

11、我现在只学习C、C 语法,不做图形界面,可以使用Qt Creator编译、运行代码吗?

可以。Qt Creator自带MinGW编译器可以编译C、C 。但不是所有从Qt官网下载的安装包,都带有MinGW编译器,下载时需特别注意。

新建工程时,使用以下工程模板即可。

12、如何使用Qt开发3D图形界面?

可以使用Open GL,请参考《QT OpenGL教程》。

13、为什么随便写一个Hello World,编译出来都30几MB?

因为Qt默认使用动态编译,所以编译出来体积超大。可以使用UPX压缩壳。

14、怎样使用Qt静态编译代码?

请参考《Qt5.9.0 MingGW静态编译》,建议下载现成的静态库。

静态编译出来的文件非常大,建议使用UPX压缩壳

其中,静态编译Qt5.7.0,需要卸载VC6.0,否则config不过。

15、怎样使用Qt发布应用?

动态编译的话,可以使用Qt Creator自带的windeployqt(5.14.0不支持windeployqt)

动态编译后,可以使用NSIS制作成安装包。

静态编译,再加UPX压缩壳,即可发布,而且是单一文件。

16、怎样把Qt的代码,移植到ARM?

你需要使用交叉编译器Arm Gcc,并设置硬件相关的参数。

17、Qt用在Android、OS X上面多吗?

不多,所以不建议使用Qt开发Android、OS X的app。

18、Qt用在哪些地方比较多?

嵌入式开发、桌面开发。

19、哪里能下载到Qt?

https://www.qt.io/download-open-source/#section-2

在官网注册账号,登录,就可以在以上页面下载Qt了。

不想注册的话,也可以使用国内的镜像。

http://mirrors.ustc.edu.cn/qtproject/official_releases/qt/

20、Qt4和Qt5有什么区别?

Qt4一行代码,即可全局支持中文,Qt5默认支持中文。

Qt4不支持串口,需要使用第三方的串口库,Qt5支持串口。

此外,Qt4和Qt5还有很多区别,这里不一一列举。

21、有哪些好用的Qt第三方库?

第三方库,不是Qt官方开发的,而是由其它组织开发的。

比较出名的是QWT库,使用QWT库,可以轻松搞定各种图形界面,如:饼状图、示波器图、波特图等。

然而,QT自带的QtCharts比QWT库还要好用。QtCharts支持C 和QML混合编程,而QWT只支持C 。

QWT已经很久不更新了,所以,有的人会使用qcustomplot,它也是一个画图的第三方库。

22、哪里可以在线浏览Qt的类?

http://doc.qt.io/qt-5/classes.html

23、哪里可以在线浏览Qml的类型?

http://doc.qt.io/qt-5/qmltypes.html

24、怎样读取USB设备的信息?

可以使用WIN32的API捕获USB的消息(#include ),或者使用libusb。

25、哪些版本的QT可以支持XP系统?

Qt5.7.0及之前的版本都可以支持XP。Qt5.7.0可以直接支持XP,但是有可能会弹出警告。

26、如何设置全局快捷键、获取全局鼠标坐标?

设置全局快捷键可以使用第三方库qxtglobalshortcut

获取全局鼠标坐标可以用QCursor::pos()。

27、如何设置窗口快捷键,应用程序快捷键?

C 的话,可以使用QShortCut类,QML可以使用ShortCut。

但是QShortCut和ShortCut,只在窗口或应用程序在focus时,才能使用快捷键,并非全局快捷键。

28、如何显示系统托盘?

Qt5.8或以上版本,可以使用QML的SystemTrayIcon;或者使用C 的QSystemTrayIcon类。

Qt5.8以下的版本(不含5.8)只能使用C 的QSystemTrayIcon类。

29、Qt的动态编译文件太多,如何打包成一个文件?

使用Enigma Virtual Box,但是可能会被杀毒软件杀掉。

使用NSIS制作成安装包。

使用第14点的静态编译。

30、C 有哪些第三方库?

除了C 自带的库(如STL库)以外的,还有第三方库

较为出名的是Boost库,推荐《Boost程序库完全开发指南》。

其它的,请参考《C 开源库大全》。

31、如何让Qt运行单一实例进程?

可以使用QtSingleApplication

32、如何实现命令行程序?

可以使用QCommandLineParser和QCommandLineOption。

33、如何使用Open CV?

使用Qt Creator的话,请参考《用Qt Creator编译opencv并配置开发环境

使用VS的话,请参考《OpenCV3.1.0 VS2015开发环境配置

OpenCV的教材,推荐《Open CV3和Qt5计算机视觉应用开发

34、如何使用Qt Creator编译出64位机的应用程序?

请使用Mingw-w64或者msvc 64 bit

35、Widget和Qml可以共存在一个窗口吗?

可以用QQuickWidget和qml交互。请参考《Qml嵌入Widget以及Qml与Widget交互》。

36、怎样制作音视频播放器?

可以使用VLC-QT

37、如何编译Open SSL?

VS编译Open SSL》。

Mingw编译Open SSL》。

38、MFC如何调用Mingw编译的Qt dll?

可以使用qtwinmingrate,但是笔者试过,未成功。

39、Qt for Automation。

Qt for Automation是关于物联网应用的框架,它包含CoAP、MQTT、KNX、OPC UA等功能,属于Qt框架的子集,但是收费的。其中CoAP协议,可以使用开源的cantcoap

40、怎样消除M16警告?

删除下面这行即可。

41、如何做PDF阅读器?

使用Poppler,但是网上只有mingw32的库,别的编译器,要用源码编译。

也可以使用Mupdf,或者在浏览器中调用pdf.js

42、如何输出Word、PPT、PDF文件?

(1)使用QAxObject来调用COM,可以调用本地的办公软件(需要破解好或正版)来生成这些格式的文件,相关的函数可以看Word/PPT的VBA手册

在Word/PPT中使用录制宏,得到VBA源码,修改其源码,再用QAxObject来调用VBA,最终再将Word转为PDF。

此外,QAxObject有方法generateDocumentation(),可以生成文档,有一些类型和枚举等说明,可用于VBA转QAxObject时参考。

(2)使用LateX,LateX对PDF支持非常好,可以任意生成PDF。再用pandoc将PDF转成Word/PPT,但是转出来的格式总是不太好。

(3)使用C /CLI(只能用VS)来调用Office Open XML的.net接口(未尝试过),但是非常灵活,速度也快。(Office Open XML可以不用安装Word/PPT)

github上有QtOfficeOpenXml库,但是依赖较多,编译失败。

43、如何用Qt搭建Web服务器?

可以使用QtWebApp

44、如何实现Web浏览器?

可以使用WebEngine,但是必须使用msvc编译。

如果使用mingw编译器,可以用miniblink,其API文档请点击这里

miniblink可以实现Electron的功能,而且体积更小。

此外,还有cef、firefox等开源浏览器。

45、怎样防止qml源码泄漏?

使用记事本打开编译qml成生的exe文件,如下图所示。

可以直接看到qml源码。这里对该exe进行加壳,即可防止源码泄露。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145838.html原文链接:https://javaforall.cn

0 人点赞