下部分**來自於我自己新增了傳遞引數的部分
#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等限定符,因為只有定義該訊號的類及其子類才可以發射該訊號。...