使用Qt5.x版本中的不同方面來開發應用程序,着重於新的Qt Quick的技術,提供了編寫C++後端的必要內容,並擴展了QtQuick。
本章提供了關於Qt5高層次的概述。它對開發者有效的展示了不同的應用模式並且使用Qt5對應用程序進行預演。此外,該章的目的是提供Qt5內容的廣泛概述以及如何聯繫Qt5的創造者。
一、前言
Qt5重點
Qt5是對非常成功的Qt4的完整補充。截止Qt4.8,Qt4已經歷了7年。現在是時候做出一個更令人稱奇的工具包,Qt5主要聚焦於以下內容:
- 出色的圖形:Qt Quick2基於OpenGL(ES)來構建場景視圖。重寫的圖形堆棧提供的圖形效果與易用性在這一領域達到了從未有過的一個新高度。
- 開發者生產力:QML和JavaScript是用於創建用戶界面的主要手段。後端由C++驅動。JavaScript和C++之間的分割爲前端開發人員集中精力創造漂亮的圖形界面,後端的C++開發人員集中精力在穩定性、性能、延長運行時間提供了一個快速迭代。
- 跨平臺移植:隨着綜合的Qt平臺抽象,它現在可以更容易、更快地移植到一個更廣泛的平臺。Qt5圍繞着Qt必備模塊和附加組件,它允許操作系統開發人員專注於要領模塊,並引出一個較小的運行時概念。
- 開放式開發:Qt目前在Qt-Project中真正開放。發展是開放的、社區性的。
二、Qt5介紹
Qt Quick是Qt5中使用的用戶界面技術,Qt Quick的本身是多種技術的集合:
- QML - 標記語言用戶界面
- JavaScript - 動態腳本語言
- Qt C++ - 高度便攜增強的C++庫
與HTML類似,QML是一種標記性語言。元素被標記在QtQuick的花括號Item{}中。它爲創建用戶界面、開發人員高效性、易於閱讀性而設計。用戶界面可以使用JavaScript代碼來增強。QtQuick能夠很容易使用QtC++來擴展自己的本地功能。簡而言之UI被稱爲前端,本地部分稱爲後端。這可以讓你從用戶接口部分分割應用程序的密集計算和本地操作。
在一個典型的項目裏,前端開發使用QML/JavaScript,後端代碼、系統接口則使用QtC++開發。這讓界面開發人員和功能開發人員之間的有一個自然的分割。通常情況下,後臺使用Qt自己的單元測試框架進行測試,導出給前端開發人員使用。
讓我們用QtQuick創建一個簡單的界面,它可以展示QML語言的某些方面。最終,我們設計一個旋轉風輪。
從一個main.qml空文檔開始,所有的QML文件將以.qml結尾,作爲一個標記性語言(如HTML)QML文檔需要一個且只有一個根元素—在例子中有相同寬度、高度(500像素)的Rectangle元素。
import QtQuick 2.0
Image {
id: root
source: "Images/background.png"
}
因爲QML不作任何限制,元素類型使用Image作爲根元素,使用source屬性作爲根元素的背景圖像。
注:
每個元素都具有屬性,例如一個圖象,有width、height,還有其它屬性,像source。圖像元素的size屬性從圖像尺寸自動扣除。否則,我們就需要設置width、height屬性爲一些有用的像素值。
最標準的元素都位於QtQuick 2.0模塊—我們在第一行包含的import語句。
id特殊屬性是可選的,幷包含一個標識符,後來在在文件的其它地方中引用這個元素。重要提示:id屬性一旦被設置就不能被更改,且不能在運行時設置。使用root作爲ID爲根元素只是一種作者的習慣,在較大QML文檔中引用最頂層元素則可以預測。
風輪的用戶界面的前景元素放置被替換爲另一個圖片。
通常情況下你的用戶界面將被由許多不同的元素類型,而不僅僅是Image元素,像下面這個例子:
import QtQuick 2.0
Image {
id: root
Image {
id: wheel
anchors.centerIn: parent
source: "Images/pinwheel.png"
}
}
使用anchor屬性放置風輪在中央位置,錨允許指定父和兄弟姐妹對象之間的幾何關係。放在另一個元素的中心(anchors.centerIn: parent)。有left、right、top、bottom、centerIn,、fill、verticalCenter、horizontalCenter關係。當然,他們需要匹配,若錨在頂部元素的左側則它沒有任何意義。
所以我們設置風輪作爲背景在父窗體的中心。
注:
有時候你需要精確做小的調整。這將有可能用anchors.horizontalCenterOffset或anchors.verticalCenterOffset。類似的調整屬性也適用於所有其它錨。請諮詢錨屬性的完整列表的文檔。
將一個圖像作爲根矩形元素的子元素展現了一種聲明式語言的一個重要概念。描述用戶界面層和分組的順序,其中最頂層(矩形)是首先繪製的,子層在包含元素的局部座標系中繪製。
爲了使展現變得更有趣,我們想加上互動。想法是,當用戶按下鼠標中的某處場景以便轉動風輪。使用MouseArea元素。
import QtQuick 2.0
Image {
id: root
Image {
id: wheel
anchors.centerIn: parent
source: "Images/pinwheel.png"
MouseArea {
anchors.fill: parent
onClicked: wheel.rotation += 90
}
}
}
當用戶點擊它裏面的覆蓋面積時,鼠標區域發出的信號。可以連接到這個信號來覆蓋onClicked功能。在這種情況下,參考風輪圖像90度旋轉。
注:
這適用於每一個信號,命名爲:on + SignalName(如:onClicked)。當所有屬性值發生了改變時,還發出一個信號,命名爲:on + PropertyName + Changed(如:onValueChanged)。
如果一個屬性改變你可以用onWithChanged觀察。
現在,風輪可以旋轉,但仍然不流利。旋轉屬性將立即更改。我們希望,屬性90度改變隨着時間的改變來進行。現在動畫開始發揮作用。要啓用此我們使用一個動畫類型調用屬性的行爲,它指定定義屬性的行爲的每一個變化。這僅是幾種類型聲明一個動畫。
import QtQuick 2.0
Image {
id: root
Image {
id: wheel
anchors.centerIn: parent
source: "Images/pinwheel.png"
MouseArea {
anchors.fill: parent
onClicked: wheel.rotation += 90
}
Behavior on rotation {
NumberAnimation {
duration: 250
}
}
}
}
現在,每當風輪旋轉改變時,將會使用NumberAnimation爲250毫秒的持續時間進行動畫處理。因此,每個90度的旋轉將消耗250毫秒。
現在,風輪看起來已經好多了。希望這可以讓你更好地理解關於Qt Quick的程序是怎麼工作。
Qt的構建模塊
Qt5包括大量的模塊。一般來說一個模塊是開發者使用的庫。有些模塊在Qt應用平臺裏是強制性的。他們形成了一套名爲Qt的必備模塊。也有很多模塊都是可選的,並形成了Qt添加功能模塊。大多數開發人員不需要使用它們,但很高興知道它們爲共同挑戰提供了無價的解決方案。
三、Qt的必備模塊
Qt的必備模塊強制應用在Qt啓用平臺裏。他們提供的基礎開發現代Qt5應用程序使用Qt Quick 2。
核心基礎模塊
Qt5模塊的最小集合進行QML編程。
模塊 |
描述 |
Qt Core |
使用其它模塊的核心非圖形類 |
Qt GUI |
圖形用戶界面(GUI)組件的基礎類,包括OpenGL的。 |
Qt Multimedia |
處理音頻、視頻、廣播、攝像頭功能的類。 |
Qt Network |
使網絡編程更容易,更輕便的類。 |
Qt QML |
QML和JavaScript的類 |
Qt Quick |
自定義用戶界面構建高度動態的應用程序的聲明性框架。 |
Qt SQL |
使用SQL集成數據庫的類 |
Qt Test |
進行Qt應用程序和庫單元測試的類。 |
Qt WebKit |
基於WebKit2實現的一個新的QML API類。參見Qt WebKitWidgets模塊。 |
Qt WebKit Widgets |
Qt4中,WebKit1和QWidget-based類。 |
Qt Widgets |
用C++部件擴展Qt圖形界面的類。 |
Qt插件
除了必不可少的模塊,Qt還提供了軟件開發的附加模塊,它不是發行版的一部分。以下是附加模塊的一個簡短的列表。
- Qt 3D 一組使3D圖形編程更容易和詳述的API。
- Qt Bluetooth 使用藍牙無線技術平臺的C++和QML的API。
- Qt Contacts 訪問地址簿/聯繫人數據庫的C++和QML的API。
- Qt Location 提供了位置定位、測繪、導航、位置搜索的C++和QML的API。 NMEA的後端定位。
- Qt Organizer 訪問的組織事件(待辦事項,事件等)的C++和QML的API
- Qt Publish and Subscribe
- Qt Sensors 訪問傳感器的C++和QML的API。
- Qt Service Framework 使應用程序能夠讀取,瀏覽和訂閱更改通知的C++和QML的API。
- Qt System Info 發現系統相關的信息和功能。
- Qt Versit 支持電子名片和的iCalendar格式
- Qt Wayland 只有Linux。包括Qt CompositorAPI(服務器)和Wayland平臺插件(客戶端)
- Qt Feedback 觸覺和聲音反饋給用戶操作。
- Qt JSON DB Qt的一個無SQL對象存儲。
注:
這些模塊不是發行版的一部分,取決於有多少活躍的貢獻者以及如何得到測試。
四、支持的平臺
Qt支持多種平臺。主要桌面和嵌入式平臺也支持。通過Qt應用程序的抽象,如今可以則可以更容易地移植到自己的平臺上。
在一個平臺上測試Qt5比較耗時。一個子平臺被qt-project選中來構建參考平臺。這些平臺通過系統測試徹底測試,以確保最佳的質量。不過提醒你:沒有代碼錯誤是免費的。