Qt訊號槽機制

2021-10-03 14:19:30 字數 2100 閱讀 9276

c++的rtti機制功能有限

qt提供了元物件系統,使用該系統的基類qobject所建立和派生的類,可以再執行期獲取該物件的類名、父

類名,成員變數資訊,成員函式資訊,進而實現訊號槽機制。

c++ 模擬

類定義檔案 object.h

1. #ifndef db_object  

2. #define db_object

3. #include

4. # define db_slots

5. # define db_signals protected

6. # define db_emit

7.class

object;8.

struct metaobject 9.;

14.struct connection

15.;

19.typedef std::multimap<

int, connection> connectionmap;

20.typedef std::multimap<

int, connection>

::iterator connectionmapit;

21.class

object

22.;

38. #endif

類實現檔案 object.cpp

1. #include 

2. #include

3. #include "object.h"

4. object::

object()

5.7. object::

~object()

8.10.

static

intfind_string

(const

char

* str,

const

char

* substr)

11.26. pos++

;27.

}28.

return-1

;29.

}30.

void object::

db_connect

(object* sender,

const

char

* sig, object* receiver,

const

char

* slt)

31.else

;38. sender-

>connections.

insert

(std::pair<

int, connection>

(sig_idx, c));

39.}

40.}

41.void object::

slot1()

42.45.

void metaobject::

active

(object* sender,

int idx)

46.54.

}55.

void object::

testsignal()

56.

自己的預處理需要生成這樣乙個檔案 db_object.cpp

1. #include "object.h"

2.static

const

char sig_names=

"sig1/n";3.

static

const

char slts_names=

"slot1/n"

;4. metaobject object::meta =;5.

void object::

sig1()

6.9.

void object::

metacall

(int idx)

10.;

18.}

qt 訊號槽機制

訊號 signals void startgetdatathread void sendpointer mainwindow 宣告乙個訊號要使用signals關鍵字。在signals前面不能使用public private和protected等限定符,因為只有定義該訊號的類及其子類才可以發射該訊號。...

QT訊號與槽機制

qt訊號與槽 posted on 2010 04 08 15 37 feisky 訊號與槽作為qt的核心機制在qt程式設計中有著廣泛的應用,本文介紹了訊號與槽的一些基本概念 元物件工具以及在實際使用過程中應注意的一些問題。qt是乙個跨平台的c gui應用構架,它提供了豐富的視窗部件集,具有物件導向 ...

Qt 訊號與槽機制

下部分 來自於我自己新增了傳遞引數的部分 ifndef my object define my object include define my slots define my signals protected define my emit class myobject struct metaob...