Qt4之connect
基本用法
connect(ui->toolButton, SIGNAL(clicked()), this, SLOT(OnClickButton()));
disconnect(ui->toolButton, SIGNAL(clicked()), this, SLOT(OnClickButton()));
返回bool
以表示信號槽連接/斷開是否成功
Q_CORE_EXPORT const char *qFlagLocation(const char *method);
#define SLOT(a) qFlagLocation("1"#a QLOCATION)
#define SIGNAL(a) qFlagLocation("2"#a QLOCATION)
SIGNAL
和SLOT
實際上是兩個宏定義,將函數名及其參數列表轉換成一個字符串,隨后moc
會掃面全部文件,將所有的信號和槽提取出來做成一個映射表。
設置回調函數
利用SIGNAL
和SLOT
兩個宏定義轉換字符串的功能,可以利用之設置回調函數
void SetCallback(const char* callback){
connect(this, SIGNAL(TestSignal()), this, callback);
}
SetCallback(SLOT(TargetFunction)); //調用
Qt5之connect
- Qt5兼容舊版的信號槽連接機制;
- 新增新語法連接信號槽,使用函數指針;
示例:
QMetaObject::Connection cobject = connect(ui->toolButton, &QToolButton::clicked, this, &Widget::OnClickButton);
disconnect(connect_object);
connect(ui->toolButton, &QToolButton::clicked, TestFunction)
int temp = 123;
connect(ui->toolButton, &QToolButton::clicked, [temp](){
qDebug()<<"Test Function"<<temp;
}); //lambda
優點:
- 編譯檢查;
- 參數自動隱式轉換;
- 不需要指定
public/private slots
; - 不需要
moc
,任何函數都可以作為槽函數;
缺點:
- 信號不能重載,若有信號重載,則編譯錯誤(信號槽應該避免使用重載);
- 不支持槽函數的默認參數;