1. 程式人生 > >關於QT,你需要知道這些基礎知識

關於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