簡單實現Qt的訊號槽

2021-09-25 21:35:44 字數 1250 閱讀 6894

#include #include #include #include #include # define slots

# define signals

# define emit

class object;

// 首先,我們定義乙個元物件,用來存放物件的所有訊號和槽的關鍵字

// active是供訊號函式呼叫的靜態函式,用來查詢並呼叫對應的槽函式

struct metaobject

;// 然後,我們定義乙個繫結結構,用來將槽的物件和其槽函式進行關聯

struct connection

;typedef std::multimapconnectionmap;

typedef std::multimap::iterator connectionmapit;

// 接下來我們就可以宣告object類了

class object

;// 實現active函式

// 在訊號物件中,找到相應編號的訊號和其繫結的所有槽函式

void metaobject::active(object* sender, int idx)

}// 查詢訊號和槽的索引編號

int object::find_index(std::vector&vec, const char * str)

return -1;

}void object::connect(object* sender, const char* signal, object* receiver, const char* slot)

else ;

// 將接受者的connection繫結到傳送者的訊號索引上

sender->connections.insert(std::pair(signal_index, c)); }}

void object::slot1()

void object::slot2()

void object::metacall(int index);}

// 訊號函式實現,active的第二個引數就是訊號索引

// 訊號函式實現的過程也是將訊號函式索引繫結的過程

// 在qt中,這已過成有moc完成,並寫在moc_***.cpp中

void object::signal1()

void object::signal2()

using namespace std;

int main()

Qt訊號槽機制的實現

因為面試時問了我這道題,導致我想去了解訊號槽到底是如何實現的,於是貼著順序看了下原始碼,大致了解了整個框架。網上關於訊號槽的文章也很多,但是大部分都是將如何應用的,這裡我就寫一下我所理解的如何實現吧,由於時間倉促,原始碼閱讀的也不甚仔細,難免導致最終理解有偏差或錯誤,大家看出了請一定指正。首先 訊號...

Qt訊號槽機制的實現

因為面試時問了我這道題,導致我想去了解訊號槽到底是如何實現的,於是貼著順序看了下原始碼,大致了解了整個框架。網上關於訊號槽的文章也很多,但是大部分都是將如何應用的,這裡我就寫一下我所理解的如何實現吧,由於時間倉促,原始碼閱讀的也不甚仔細,難免導致最終理解有偏差或錯誤,大家看出了請一定指正。首先 訊號...

QT 訊號與槽 最簡單例子

qt 訊號與槽 最簡單例子 main.cpp 和 my head.h原始碼 cpp view plain copy ifndef my head h define my head h include include eastonwoo class a public qobject qobject c...