關于 QT 對象模型那些事
QT 對象模型 那些事是本文要介紹的內容,標準 C++對象模型提供了支持對象 paradigm 的高效運行環境.但是它的靜態本質在某些問 題域中適應性不夠. 圖形用戶界面編程既需要運行時效率又需要高度適應性. Qt通過結合 C++的速度以及對象模型的適應性達到了圖形用戶界面編程的目標.
Qt 為 C++ 添加了以下特性:
非常強大的,在對象之間進行無縫通信的,稱作信號和槽的,機制.
可查詢和可設計的對象屬性.
強大的事件以及事件過濾.
用于國際化的取決于上下文的字符串翻譯.
成熟的內部驅動時鐘使得QT能夠整合優雅的在一個事件驅動GUI程序中整合多個目標.
以對象所有權這種非常自然方式組織的非常結構化的及可查詢的對象樹.
安全指針(QPointer)可以在參考對象被銷毀后,自動置為0 ,而不像通常的 C++ 指針一樣這時會成為懸空指針.
在不同庫邊界之間動態轉換.
這些特征當中的多數使用標準 C++ 技術實現, 基于對 QObject 的繼承. 此外,像對象通信機制以及動態屬性系統, 需要Qt's 所有的元對象編譯器(moc)提供的元對象系統 .
元對象系統是一個使得C++語言更加適合于組件編程擴張.盡管 templates也可以用來對C++進行擴展, 元對象系統提供了標準 C++ 使用 templates 所不能實現的好處; 查看:
Why Doesn't Qt Use Templates for Signals and Slots?
以獲取更多信息.
Qt對象: 身份標識 還是 值
以上列出的QT對象模型添加的特征, 需要我們認為 Qt 對象作為一個身份標識,而非值.值可被復制或賦值;而身份標識只能克隆. 克隆意指創建一個新的身份標識,而不是完整復制舊的對象.例 如,雙胞胎有不同的身份標識. 它們看起來可能完全一樣, 當是有不同得名字, 不同的位置,以及 還可能會有完全不同的社會網絡,也就是說克隆身份標識是比復制或者賦值更加復雜的操作.我們可以在QT對象模型中發現這一點.
對于一個 QT 對象:
有***的 QObject::objectName()名字.如果我們復制一個Qt對象,如何命名復制對象?
在對象體系中有一個位置. 如果我們復制一個Qt對象, 該把復制對象放體系中哪個位置?
能夠被連接到其他 Qt 對象,以發送信號到其他 Qt 對象或接收其他Qt 對象發送的信號. 如果我們復制一個 Qt 對象, 我們如何處理復制對象的信號-槽連接?
可以在運行時添加在 C++ 中所沒有聲明的新屬性. 如果我們可以復制一個Qt對象, 那麼我們是否需要繼承這些動態添加的新屬性?
由于以上原因, Qt對象應該被當做身份標識, 而不是作為值. 身份標識是被克隆, 而不是被復制 ,克隆身份標識是比復制或者賦值更加復雜的操作. 因此, QObject及其所有子類(直接或 間接)禁用了它們的復制構造函數和復制操作符號。
小結:QT 對象模型 那些事的內容介紹完了,希望本文對你有所幫助。更多相關內容請參考編輯推薦。