函数原型
static QMetaObject::Connection connect(const QObject *sender, const char *signal,const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);
static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection);
inline QMetaObject::Connection connect(const QObject *sender, const char *signal,const char *member, Qt::ConnectionType type = Qt::AutoConnection) const;
总共有五个参数,从左到右分别为为发送的对象指针、发送信号、接收对象指针、接收对象的槽函数、连接类型。
一、用法
方法一:
使用SIGNAL和SLOT宏,qt4用法
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(slotFunc(bool)));
方法二:
直接使用函数指针,槽函数没有重载的话,直接使用函数地址就行。存在多参数情况下使用static_cast<>()--C++11,可指定参数
connect(ui->pushButton,&QPushButton::clicked,this,static_cast<void(MainWindow::*)(bool)>(&MainWindow::slotFunc));
方法三:
QOverload<>::of()--qt5
connect(ui>pushButton,&QPushButton::clicked,this,QOverload<bool>::of(&MainWindow::slotFunc));
方法三:
qOverload<>(),需要C++14的支持
connect(ui>pushButton,&QPushButton::clicked,this,qOverload<bool>(&MainWindow::slotFunc));
方法四:
lambada表达式,一般可捕获this指针使用--C++11
connect(ui>pushButton,&QPushButton::clicked,this,[this](bool check){});
二、connect失败情况
1、信号发送者或槽接收者之一已被删除,或者还没还没被创建初始化
2、尝试连接的类或对象不是从QObject
派生,或者没有使用Q_OBJECT
宏
三、connect断开情况
1、显示调用disconnect
2、信号发送者或槽接收者之一被删除