技術部落格1

2021-08-02 08:14:26 字數 1720 閱讀 3272

connect,是qt

中的連線函式

,將訊號傳送者sender物件中的訊號signal與接受者receiver中的member槽函式

聯絡起來。

qobject::connect的定義是這樣的:

static bool connect(const qobject *sender, const char *signal,

const qobject *receiver, const char *member, qt::connectiontype =

#ifdef qdoc

qt::autoconnection

#else

#ifdef qt3_support

qt::autocompatconnection

#else

qt::autoconnection

#endif

#endif

);inline bool connect(const qobject *sender, const char *signal,

const char *member, qt::connectiontype type =

#ifdef qdoc

qt::autoconnection

#else

#ifdef qt3_support

qt::autocompatconnection

#else

qt::autoconnection

#endif

#endif

) const;

其中第二個connect的實現其實只有一句話:   

所以對於connect函式的學習其實就是研究第乙個connect函式。

在使用connect函式的時候一般是這樣呼叫的:

connect(sender,signal(signal()),receiver,slot(slot()));  

兩個巨集:signal() 和slot();通過connect宣告可以知道這兩個巨集最後倒是得到乙個const char*型別。

在qobjectdefs.h中可以看到signal() 和slot()的巨集定義:

#ifndef qt_no_debug

# define qlocation "\0"__file__":"qtostring(__line__)

# define method(a)   qflaglocation("0"#a qlocation)

# define slot(a)     qflaglocation("1"#a qlocation)

# define signal(a)   qflaglocation("2"#a qlocation)

#else

# define method(a)   "0"#a

# define slot(a)     "1"#a

# define signal(a)   "2"#a

#endif

這兩個巨集的作用就是把函式名轉換為字串並且在前面加上識別符號。

比如:signal(read())展開後就是"2read()";同理slot(read())展開後就是"1read()"。

connect(sender,signal(signal()),receiver,slot(slot()));  

實際上就是connect(sender,「2signal()」,receiver,「1slot())」;  

2011 11 9技術部落格

現在已近是開學第十一周了,但正式上課菜才三周,上一周主要學了c 的一些基本程式設計。有三種基本結構,順序,分支,和迴圈。重點學了分支結構設計,if語句和switch語句。我覺得if語句還是挺簡單的,無非就兩種if 表示式1 語句1 else if 表示式2 語句2 else else 語句n 要注意...

技術部落格003

從qobject qobject.h 原始碼中可以看到qobject connect的定義是這樣的 cpp view plain copy static bool connect const qobject sender,const char signal,const qobject receive...

技術部落格3

模態對話方塊與事件迴圈 兩種常規用法 qdialog dlg new qdialog dlg show 當然,這兒用指標 即分配到heap中 不是必須的。有疑問?或者有時發現視窗一閃而過?那麼你需要了解c c 中變數的作用域和生存週期 qdialog dlg dlg.exec 這種情況下,我們一般都...