这里的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进行加壳,即可防止源码泄露。
最新评论