QT:QObject 簡單介紹


QObject 是所有Qt對象的基類。

QObject 是Qt模塊的核心。它的最主要特征是關於對象間無縫通信的機制:信號與槽。使用connect()建立信號到槽的連接,使用disconnect()銷毀連接,使用blockSignals()暫時阻塞信號以避免無限通知循環,使用connectNotify()和disconnectNotify()追蹤連接。

QObject 以對象樹的形式組織起來。當為一個對象創建子對象時,子對象會自動地添加到父對象的children()列表中。父對象擁有子對象的所有權,比如父對象可以在自己的析構函數中刪除它的孩子對象。使用findChild()或findChildren()通過名字和類型查詢孩子對象。

每個對象都有objectName(),也可以通過metaObject()獲得它的類名。可以使用inherits()檢測對象的類是否在某個類的繼承層次結構中。

對象被刪除時,發射destroyed()信號,捕捉這個信號以免懸掛對這個對象的引用。

QObject 通過event()接收事件,通過installEventFilter()和enventFilter()過濾來自其他對象的事件。childEvent()可以捕捉來自子對象的事件。

QTimer可以實現高水平的定時器。

宏Q_OBJECT是任何實現信號、槽或屬性的強制性要求。不管是否需要實現這些機制,都要求使用這個宏。否則會引發一些函數的奇怪行為。

所有的Qt部件都繼承自QObject 。函數isWidgetType()檢測對象是否一個部件。它比以下這些語句要運行得更快:qobject_cast(obj) 或者obj->inherits("QWidget")。

children()返回QObjectList,它是QList的typedef。



沒有復制構造函數和賦值操作符

QObject 既沒有復制構造函數也沒有賦值操作符。實際上它們使用宏Q_DISABLE_COPY()聲明在私有部份。所有派生自QObject 的對象都使用這個宏聲明復制構造函數和賦值操作符為私有

這樣的主要結果是,在使用QObject子對象作為值的地方要使用QObject類型的指針因為沒有構造函數,你不能把QObject 的子對象作為值存儲在容器類中,必須存儲它的指針

自動連接

Qt的元對象系統自動地為QObject 的子類和他們的對象建立信號和槽的連接。只要有名字的對象被定義,槽就會自動擁有簡單的約定命名,連接在運行時間通過函數QMetaObject::connectSlotsByName()執行。

國際化

所有的 QObject 支持Qt的轉換特性。能夠使用戶界面在不同語言間進行轉換。為了將用戶可見的文本得到轉換,必須將它們包裹到函數tr()中。

 

轉自:http://blog.chinaunix.net/uid-374124-id-4121508.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM