關於QT,你需要知道這些基礎知識
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是需要自己設定才可以用。
7、Qt Creator的原生編輯器有Vi / Vim模式嗎?
有,叫Fake Vim,按照下圖設定即可。
8、新手入門應該學哪個版本的Qt?
應該學最新的Qt5,推薦教材《Qt Creator快速入門》、《Qt Quick核心程式設計》,以及官方自帶的英文文件。
9、哪裡能找到Qt的官方文件?
開啟Qt Creator,如下圖,Help,就是了。
有某些方法,文件上並沒有寫,但是實際上是存在的。這時需要利用程式碼補全。
10、什麼是pyQt?
pyQt是指用python指令碼語言來呼叫Qt框架,從而快速開發圖形介面。但是商業使用pyQt,是要收費的。
目前只有一本關於pyQt4的書——《PyQt程式設計指南》,但是現在最新的是pyQt5。
推薦《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。
動態編譯後,可以使用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 <windows.h>),或者使用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程式庫完全開發指南》。
31、如何讓Qt執行單一例項程序?
可以使用QtSingleApplication。
32、如何實現命令列程式?
可以使用QCommandLineParser和QCommandLineOption。
byte,short,int,long,float,double