Qt之connect


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)

SIGNALSLOT實際上是兩個宏定義,將函數名及其參數列表轉換成一個字符串,隨后moc會掃面全部文件,將所有的信號和槽提取出來做成一個映射表。

設置回調函數

利用SIGNALSLOT兩個宏定義轉換字符串的功能,可以利用之設置回調函數

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,任何函數都可以作為槽函數;

缺點:

  • 信號不能重載,若有信號重載,則編譯錯誤(信號槽應該避免使用重載);
  • 不支持槽函數的默認參數;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM