Qt框架简介
這里的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進行加殼,即可防止源碼泄露。
總結
- 上一篇: VUE调试工具(Vue.js)
- 下一篇: 最新排名,直逼ChatGPT?Falco