元物件系統
元物件系統提供了訊號與槽機制
1.qobject類,為objects提供了乙個可以利用元物件系統的基類。2.q_object巨集: 在類的私有部分宣告這個巨集可以啟用元物件特性,例如:動態屬性、訊號與槽。
3.meta-object編譯器(moc): 為每個qobject子類生成必要的**來實現元物件特性。
moc工具會讀取c++原始檔,如果發現有包含q_object巨集的類宣告,就生成另外乙個包含這些類的元物件**的c++原始檔。生成的原始檔要麼在類原始檔裡用#include包含,或者(更常見)與類的實現**直接進行編譯連線。
qobject::metaobject()返回類關聯的meta-object物件。
qmetaobject::classname()在執行時以字串的形式返回類名,無需c++編譯器提供執行時類別資訊(rtti)的支援。
qobject::inherits()返回乙個物件是否是qobject繼承樹上乙個類的例項。
qobject::tr()和qobject::trutf8()提供國際化支援,將字串翻譯成指定的語言。
qobject::setproperty()和qobject::property()通過名稱動態設定和獲取屬性。
qmetaobject::newinstance()構造類的乙個新例項。
qobject_cast()動態轉換qobject類的型別。qobject_cast()函式和標準c++的dynamic_cast()功能類似
qobject *obj=
new mywidget;
qwidget *wid=qobject_cast(obj);
wid->setobjectname("widget");
mywidget *myw=qobject_cast(wid);
屬性1.要宣告乙個屬性,在繼承qobject的類中使用q_property()巨集
2.乙個屬性的行為就像乙個類的資料成員,但它有通過元物件系統訪問的附加功能。宣告屬性需求
q_property(bool focus read hasfocus)
q_property(bool enabled read isenabled write setenabled)
q_property(qcursor cursor read cursor write setcursor reset unsetcursor)
q_property(qcolor color member m_color notify colorchanged)
q_property(qreal spacing member m_spacing notify spacingchanged)
q_property(qstring text member m_text notify textchanged)
...signals:
void colorchanged();
void spacingchanged();
void textchanged(const qstring &newtext);
private:
qcolor m_color;
qreal m_spacing;
qstring m_text;
乙個屬性可以使用常規函式qobject::property()和qobject::setproperty()進行讀寫,除了屬性的名字,不用知道屬性所在類的任何細節。
qpushbutton *button = new qpushbutton;
qobject *object = button;
button->setdown(true);
object->setproperty("down", true);
事件
在qt中,事件就是物件,派生自qevent抽象類
事件的執行過程
當乙個事件發生時qt會構造乙個事件的物件,它識別事件型別,將事件傳送給特定的物件,而後特定的物件將會返回特定的bool
事件處理陳程式相當於乙個虛函式,你也可以自己重寫虛函式
事件過濾器所謂事件過濾就是提前截獲發往某個物件的所有訊息,根據需要遮蔽掉某一些,或者對某些訊息提前進行些處理,其他的事件處理將不會接收到該事件.
#include "eventfilter.h"
#include
#include
bool eventfilter::eventfilter(qobject *to, qevent *event)//event filter(write number only)
return
true;
}return qobject::eventfilter(to, event);
}int main(int argc, char *argv)
傳送事件::sendevent()使用notify()函式直接給receiver傳送事件。
postevent(qobject* receiver, qevent* event)
向事件佇列中新增receiver和event。
簡單說,sendevent使用的是同步處理事件,postevent使用的非同步處理事件
::postevent()
常見的事件型別
qresizeevent、qpaintevent、qmouseevent、qkeyevent、qcloseevent。
物件屬性事件
元物件系統 元物件系統提供了訊號與槽機制 1.qobject類,為objects提供了乙個可以利用元物件系統的基類。2.q object巨集 在類的私有部分宣告這個巨集可以啟用元物件特性,例如 動態屬性 訊號與槽。3.meta object編譯器 moc 為每個qobject子類生成必要的 來實現元...
類,物件,方法,屬性,事件的概念
1,類不存在記憶體,我覺得這種說法本身就不太恰當,在不在記憶體要根據as的即時執行和記憶體的實際工作情況決定吧?2,類可以有也可以沒有屬性,而且很多屬性也是用函式定義的,跟定義方法的形式一樣。至於事件,事件是外部的,它是觸發方法發生作用的外部原因。3,我猜你所說的元件是一定指的是影片剪輯,也就是我們...
DataGridView的屬性 事件 方法
屬性名 操作博主翻譯 allowusertoaddrows 設定false 是否向使用者顯示用於新增行的選項 columns 拖動滾動條時,固定此列 rowheadersvisible 設定為 false 最左側列是否顯示 rowtemplate defaultcellstyle datagridv...