QT学习笔记(1)----- QT简介
名字由來
在《C++ GUI Programming with Qt 4》里有這么一段介紹:
A Brief Histroy of Qt:
The letter 'Q' was chosen as the class prefix because the letter looked beautiful in Haavard's Emacs font. The 't' was added to stand for "toolkit", inspired by Xt, the X Toolkit. The company was incorporated on March 4, 1994,originally as Quasar Technologies, then as Troll Tech, and today as Trolltech.
說白了,Qt不是某幾個單詞的縮寫,而是一個拼湊,情況是,Q這個字符在Haavard's Emacs字體下顯得很漂亮,所以選Q作為這個框架的名字的開頭前綴,t是表示工具集的意思,來自toolkit的首字母,拼起來就成了Qt,所以就是Qt這個名字命名的由來
?
什么是Qt
Qt是一個針對桌面、嵌入式、移動設備的一個跨平臺的應用程序開發框架,支持的平臺包括Linux、OS X、Windows、VxWorks、QNX、Android、iOS、BlackBerry(黑莓)、Sailfish OS(旗魚操作系統)等。
Qt 1991年由Trolltech-奇趣科技(成立于1994年)開發,2008年,Trolltech被Nokia收購,2012年,Qt被Digia收購。
Qt是基于C++編寫的框架,它既可以開發GUI程序,也可用于開發非GUI程序,比如控制臺工具和服務器,它提供了在網絡,數據庫,OpenGL,Web技術,傳感器,通信協議(藍牙,串行端口,NFC),XML和JSON處理,打印,PDF生成等領域的跨平臺開發的模塊。預處理器,MOC(全稱:Meta-Object Compiler-元對象編譯器)用于擴展C++,如:信號和槽的特性。在編譯之前,先使用MOC分析Qt擴展的C++源文件(檢測是否包含Q_OBJECT宏),然后生成符合C++標準的源文件(新文件名將會由moc_加上原文件名構成)。因此框架本身和應用程序/庫使用它能被任何符合標準C++的編譯器(像Clang、GCC、 ICC、MinGW 和MSVC)所編譯。
?
發展史
Qt的第一個商業版本于1995年推出,隨后Qt的發展就很快了,下面是Qt發展史上的一 些里程碑,從之前的Qt1.x開始到現在的Qt5.x。
QT分為4.0版本和5.0版本他們之間的差別很大,不通用!!!不通用!!!不通用!!!
Qt1-3
| 1.40 | 10 July 1998 |
| 1.41 | 2 October 1998 |
| 1.42 | 19 December 1998 |
| 1.44 | 13 March 1999 |
| 2.0 | 26 June 1999 |
| 2.1 | 13 April 2000 |
| 2.2 | 7 December 2000 |
| 2.3 | 8 March 2001 |
| 3.0 | 16 October 2001 |
| 3.1 | 14 November 2001 |
| 3.2 | 24 July 2003 |
| 3.3 | 5 February 2004 |
Qt4
Trolltech在2005年6月28發布了Qt4.0,介紹了框架的五個新技術:
| 4.1 | 20 December 2005 | 推出集成SVG微小的支持,一個PDF的后端Qt打印系統,以及其他一些功能。 |
| 4.2 | 4 October 2006 | 介紹了Windows Vista的支持,部件的CSS樣式支持,以及QGraphicsView框架-在屏幕上高效渲染成千上萬個2D對象,以取代Qt3.x中的QCanvas類。 |
| 4.3 | 30 May 2007 | 改進了Windows Vista支持,改進了OpenGL引擎、SVG文件的生成,增加了QtScript(基于QSA的ECMAScript腳本引擎)。 |
| 4.4 | 6 May 2008 | 特性包含了改進multimedia的支持(使用Phonon),增強XML支持,集中共享內存的IPC框架,以及WebKit集成。 |
| 4.5 | 3 March 2009 | 主要包括功能有QtCreator,改進圖形引擎,WebKit的集成,OpenDocument格式寫入支持和新的許可選項,以及OS X Cocoa框架的支持。 |
| 4.6 | 1 December 2009 | 新的API框架-動畫、手勢、多點觸控。支持Symbian、Windows 7和Mac OS X 10.6,支持擴展一些Unix系統。也取得了整體性能的改進。 |
| 4.7 | 21 September 2010 | QML 和 Qt Quick |
| 4.8 | 15 December 2011 | Qt的平臺抽象化,支持單線程OpenGL,多線程HTTP,優化了文件系統訪問。 |
Qt5
Qt5于2012年12月19正式發布,這個新版本標志著平臺的重大變化,硬件加速的顯卡,QML和JavaScript發揮了重要作用。傳統的C++ - 僅QWidgets繼續得到支持,但沒有從新體系結構的性能改進中受益,Qt5帶來了速度及用戶界面上的顯著改進,Qt5開發框架移動至qt-project.org。外部開發者可以為Digia公司提交補丁,并讓他們審查。
| 5.0 | 19 December 2012 | 對Qt4.x進行一系列重大改革。完成Wayland的支持。 |
| 5.1 | 3 July 2013 | 新模塊以及Android和iOS實驗性的支持技術預覽。 |
| 5.2 | 12 December 2013 | 第一個官方支持Android和iOS的版本。 |
| 5.3 | 20 May 2014 | 集中于穩定性和可用性 |
| 5.4 | 10 December 2014 | 完整的WinRT和Windows Phone支持。介紹基于Chromium的Qt WebEngine內部組件,將在未來的版本中取代QtWebKit。動態的GL圖形切換在Windows(ANGLE或OpenGL)后臺,本地化的“外觀和感覺”在QtQuick的控制在Android平臺的后端,引入Qt WebChannels提供QObject到WebSockets的橋梁。最初僅使用Qt WebKit的集成,但還正在5.5下進行Qt WebEngine集成 |
| 5.5 | 1 July 2015 | Qt5.5根據官方網站提供的功能:新模塊: Qt 3D、Qt Canvas 3D、Qt Location。過時的模塊的:Qt WebKit、Qt Declarative (Qt Quick 1)、Qt Script。藍牙API的最終版本,新的視頻過濾框架,Camera和QML MediaPlayer改善iOS,適用于Linux的NFC,SSL/TLS改進Qt Network |
| 5.6 | Alpha release: 8 September 2015 Final release plan: 8 December 2015 | 值得注意的改進:Qt Core:一些性能改進,包括減少動態性能的內存使用情況和性能最佳化的QString Qt Network:支持HTTP重定向 Qt GUI:改進了跨平臺的OpenGL ES3.0和3.1 Qt Multimedia:添加QML類型播放列表 Qt WebEngine:基于Chromium 45,自定義URL方案的API,攔截和阻止網絡請求,并跟蹤或阻止Cookie QtQML:減少內存消耗 嵌入式平臺:支持Intel Atom-based NUCs 過時的模塊:Qt Script、Qt Enginio 已刪除模塊:Qt WebKit, Qt Declarative (Qt Quick 1) |
平臺支持
Qt支持下述平臺:
優點
Qt同X Window上的 Motif、Openwin、GTK 等圖形界面庫和 Windows平臺上的 MFC、OWL、VCL、ATL是同類型的東西,但是 Qt 具有下列優點:
-
優良的跨平臺特性:?
Qt支持下列操作系統: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。 -
面向對象?
Qt 的良好封裝機制使得 Qt 的模塊化程度非常高,可重用性較好,對于用戶開發來說是非常 方便的。 Qt 提供了一種稱為 signals/slots 的安全類型來替代 callback,這使得各個元件 之間的協同工作變得十分簡單。 -
豐富的 API?
Qt包括多達250個以上的C++類,還替供基于模板的collections、serialization、 file、I/O device、 directory management、date/time 類。甚至還包括正則表達式的處理功能。 -
支持 2D/3D 圖形渲染,支持 OpenGL
-
大量的開發文檔
-
XML 支持
Qt Creator
簡介
在發布 Qt 4.6 的同時,作為 Qt 開發跨平臺 IDE 的Qt Creator也發布了更新版本。Qt Creator 1.3 和 Qt 4.6共同構成的 Qt SDK,包含了開發跨平臺應用程序所需的全部功能。
Qt Creator是一個用于Qt開發的輕量級跨平臺集成開發環境。Qt Creator可帶來兩大關鍵益處:提供首個專為支持跨平臺開發而設計的集成開發環境 (IDE),并確保首次接觸Qt框架的開發人員能迅速上手和操作。即使不開發Qt應用程序,Qt Creator也是一個簡單易用且功能強大的IDE。
Qt Creator 包括項目生成向導、高級的 C++ 代碼編輯器、瀏覽文件及類的工具、集成了 Qt Designer、Qt Assistant、Qt Linguist、圖形化的 GDB 調試前端,集成 qmake 構建工具等。
功能和優勢
QtCreator 主要是為了幫助新 Qt 用戶更快速入門并運行項目,還可提高有經驗的 Qt 開發人員的工作效率。
- 使用強大的 C++ 代碼編輯器可快速編寫代碼
語法標識和代碼完成功能輸入時進行靜態代碼檢驗以及提示樣式上下文相關的幫助代碼折疊括號匹配和括號選擇模式高級編輯功能
- 使用瀏覽工具管理源代碼
集成了領先的版本控制軟件,包括 Git、Perforce 和 Subversion開放式文件,無須知曉確切的名稱或位置搜索類和文件跨不同位置或文件沿用符號在頭文件和源文件,或在聲明和定義之間切換
- 為Qt跨平臺開發人員的需求而量身定制
集成了特定于 Qt 的功能,如信號與槽 (Signals & Slots)圖示調試器, 對 Qt 類結構可一目了然集成了 Qt Designer 可視化布局和格式構建器只需單擊一下就可生成和運行 Qt 項目
Qt Designer
Qt Designer被稱為Qt設計師,用于設計和構建圖形用戶界面(Qt Widgets)。你可以組合和自定義窗口或對話框(所見即所得),并使用不同的風格和分辨率進行測試。用Qt Designer創建的窗口部件和表格無縫集成編程代碼,采用Qt信號和槽機制,這樣就可以輕松地分配圖形元素的行為。在Qt設計師中設置的所有屬性可以動態地在代碼中進行更改。此外,類似插件推廣和自定義插件功能,可以使用自己的組件來使用Qt Designer。
注意:你也可以選擇使用Qt Quick來設計用戶界面,而不是Qt Widgets。這樣更容易寫各種各樣的應用。它可以完全定制外觀,觸摸反應的元素,流暢的動畫過渡,支持OpenGL圖形加速功能。如果剛接觸Qt Designer,可以看看Qt設計師文檔。有關如何使用Qt設計師,請參閱Qt設計師快速入門。
Qt Linguist
簡介
Qt Linguist被稱為Qt語言家。主要任務是讀取翻譯文件、為翻譯人員提供友好的翻譯界面,是用于界面國際化的重要工具。它能幫助你很容易讀懂C++語言。
使用方式
lupdate可以把.h、.cpp、.ui中需要翻譯的字符串提取出來形成.ts文件,然后用linguist翻譯。用lerealse生成.qm。
翻譯一個含有tr()調用的Qt應用程序需要以下三步:?
1. 運行ludate,從應用程序的源代碼中提取所有用戶可見的字符串。?
2. 使用Qt Linguist翻譯該應用程序。?
3. 運行lrelease,生成二進制.qm文件,應用程序可以使用QTranslator加載這個文件。?
如果開發工程中出現翻譯改動,可以多次執行此過程!
Qt Assistant
Qt Assistant被稱為Qt助手,是Qt自帶的一款可定制、可重新發行的幫助文件瀏覽器。它支持HTML文件,用戶可以利用其定制自己的功能強大的幫助文檔瀏覽器。
?
===================================常見問答=======================================
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核心編程》,以及官方自帶的英文文檔。
9、哪里能找到Qt的官方文檔?
打開Qt Creator,如下圖,Help,就是了。
有某些方法,文檔上并沒有寫,但是實際上是存在的。這時需要利用代碼補全。
10、什么是pyQt?
pyQt是指用python腳本語言來調用Qt框架,從而快速開發圖形界面。但是商業使用pyQt,是要收費的。
pyQt4請看《PyQt編程指南》。pyQt5請看《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默認使用動態編譯,所以編譯出來體積超大??梢允褂肬PX壓縮殼。
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。
33、如何使用Open CV?
使用Qt Creator的話,請參考《用Qt Creator編譯opencv并配置開發環境》
使用VS的話,請參考《OpenCV3.1.0+VS2015開發環境配置》
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》。
?
總結
以上是生活随笔為你收集整理的QT学习笔记(1)----- QT简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAsyncSocket及CSocket
- 下一篇: QT学习笔记(2)----- QT安装教