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