基於C 的Qt(三)Qt類庫概述

2021-10-05 06:53:40 字數 1987 閱讀 9695

qt是乙個用標準c++編寫的跨平台開發類庫,它對標準c++進行了擴充套件,引入了元物件系統、訊號與槽、屬性等特性,使應用程式的開發變得更高效。

qt類庫中大量的類以模組形式分類組織的,包括基本模組和擴充套件模組等。乙個模組通常就是乙個程式設計主題,如資料庫、圖表、網路等。

qt本身並不是一種程式語言,它本質上是乙個跨平台的c++開發類庫,是用標準c++編寫的類庫,它為開發gui應用程式和非gui應用程式提供了各種類。

qt對標準c++進行了擴充套件,引入了一些新概念和功能,例如訊號和槽、物件屬性等。qt的元物件編譯器(meta-object compiler,moc)是乙個預處理器,在源程式被編譯前先將這些qt特性的程式轉換為標準c++相容的形式,然後再由標準c++編譯器進行編譯。這就是為什麼在使用訊號與槽機制的類裡,必須新增乙個q_object巨集的原因,只有新增了這個巨集,moc才能對類裡的訊號與槽的**進行預處理。

qt core模組是qt類庫的核心,所有其他模組都依賴於此模組,如果使用qmake來構建專案,qt core模組則是被自動加入的。

qt為c++語言增加的特性就是在qt core模組裡實現的,這些擴充套件特性由qt的元物件系統實現,包括訊號與槽機制、屬性系統、動態型別轉換等。

qt的元物件系統(meta-object-system)提供了物件之間通訊的訊號與槽機制、執行時型別資訊和動態屬性系統。

元物件系統由以下三個基礎組成:

1.qobject類是所有使用元物件系統的類的基類;

2.在乙個類的private部分宣告q_object巨集,使得類可以使用元物件的特性,如動態屬性、訊號與槽。

3.moc(元物件編譯器)為每個qobject的子類提供必要的**來實現元物件系統的特徵。

構建專案時,moc工具讀取c++原始檔,當它發現類的定義裡有q_object巨集時,它就會為這個類生成另外乙個包含有元物件支援**的c++原始檔,這個生成的原始檔連同類的實現檔案一起被編譯和連線。

除了訊號和槽機制外,元物件還提供如下一些功能。

1.qobject::metaobject()函式返回類關聯的元物件,元物件類qmetaobject包含了訪問元物件的一些介面函式,例如qmetaobject::classname()函式可在執行時返回類的名稱字串。

qobject obj=new qpushbutton;

obj->metaobject()->classname();

2.qmetaobject::newinstance()函式建立類的乙個新的例項。

3.qobject::inherits(const charclassname)函式判斷乙個物件例項是否是名稱為classname的類或qobject的子類的例項。

1.屬性定義

qt提供乙個q_property()巨集可以定義屬性,它也是屬於元物件系統實現的。qt的屬性系統與c++編譯器無關,可以用任何標準的c++編譯器編譯定義了屬性的qt c++程式。

2.屬性的使用

不管是否用read和write定義了介面函式,只要知道屬性名稱,就可以通過qobject::property()讀取屬性值,並通過qobject::setproperty()設定屬性值。

3.動態屬性

qobject::setproperty()函式可以在執行時為類定義乙個新的屬性,稱之為動態屬性。動態屬性是針對類的例項定義的。

動態屬性可以使用qobject::property()查詢,就如在類定義裡用q_property巨集定義的屬性一樣。

例如,在資料表編輯介面上,一些欄位是必填字段,就可以在初始化介面時為這些欄位的關聯顯示元件定義乙個新的required屬性,並設定值為「true"。

4.類的附加資訊

屬性系統還有乙個巨集q_classinfo(),可以為類的元物件定義」名稱——值「資訊。

基於C 的Qt(四)

介面設計時使用最多的元件恐怕就是qlabel和qlineedit,qlabel用於顯示字串,qlineedit用於顯示和輸入字串。這兩個函式都涉及qstring類。qstring類是qt程式裡經常使用的類,用於處理字串。qstring類可以進行字串與數字之間的轉換,使用qlineedit就可以實現數...

QT容器類(三) 之 QMap QHash

一 介紹 qmap qmap中的key value對是公升序排列的 插入和刪除操作中都可以使用運算子,其下標為key 為避免建立不必要的空值,推薦用vlaue 而不是從qmap中取值。qmap中的k和t除了要求具備預設建構函式 拷貝建構函式和賦值運算子外,k還必須支援operator keys va...

基於 Qt 的 NTP Client 實現

ntp,network timestamp protocol,網路時間協議。ntp client 簡單來說,就是以網路上某個節點上的時間為基準,校正本機時間。ntp server 即提供本機時間戳給 client 校準的伺服器。ntp 協議是基於 udp 的。ntp 的實現是 c s 結構的,cli...