Qt 訊號與槽機制

2021-09-25 23:35:59 字數 1929 閱讀 3247

下部分**來自於我自己新增了傳遞引數的部分 

#ifndef my_object

#define my_object

#include #define my_slots

#define my_signals protected

#define my_emit

class myobject;

struct metaobject

;struct connection

;//key 代表signal在sender裡的序號,value就是 slot所需的資訊

typedef std::multimapconnectionmap;

typedef std::multimap::iterator connectionmapit;

class myobject

;#endif

#include "stdafx.h"

#include "myobject.h"

#include #include myobject::myobject(void)

myobject::~myobject(void)

//去signal和slot字串中查詢signal和slot的序號

static int find_string(const char* str,const char* substr)

pos++;

} return -1;

}//把sender的signal與receiver的slot儲存到sender的map裡

void myobject::connect(myobject* sender,const char* signal,

myobject* receiver,const char* slot)

; //儲存在 sender的 map裡

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

void myobject::myslot(int value1,double value2);

//這個函式大概就是sender與receiver的中介軟體,利用儲存在metaobject

//裡的signal字串與slot字串,去呼叫那個和signal相應的receiver的slot

void metaobject::active(myobject* sender,int idx,void** ar**)

}void myobject::testsignal()

//每乙個\n就分隔出來乙個 signal訊號量 的字串,這個字串來自signal訊號函式名字,

//在qt裡這一部分功能是由moc實現的

static const char sig_names ="mysig\n";

//slot字串產生原理如上

static const char slt_names ="myslot\n";

metaobject myobject::meta = ;

//qt裡面定義的signal函式只有定義,然後靠moc生成函式體

void myobject::mysig(int value1,double value2)

; //在signal函式裡呼叫active,最終會呼叫到相應的slot函式

metaobject::active(this,0,ar**);

}//按照slot號去呼叫相應的函式

void myobject::metacall(int idx,void** ar**)

}

#include "stdafx.h"

#include "myobject.h"

#include int _tmain(int argc, _tchar* ar**)

QT訊號與槽機制

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

Qt訊號槽機制

c 的rtti機制功能有限 qt提供了元物件系統,使用該系統的基類qobject所建立和派生的類,可以再執行期獲取該物件的類名 父 類名,成員變數資訊,成員函式資訊,進而實現訊號槽機制。c 模擬 類定義檔案 object.h 1.ifndef db object 2.define db object...

qt 訊號槽機制

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