物件屬性事件

2021-08-29 18:50:38 字數 2989 閱讀 2687

元物件系統

元物件系統提供了訊號與槽機制

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)

傳送事件

使用notify()函式直接給receiver傳送事件。

postevent(qobject* receiver, qevent* event)

向事件佇列中新增receiver和event。

簡單說,sendevent使用的是同步處理事件,postevent使用的非同步處理事件

::sendevent()

::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...