信号和槽是QT自行定义的一种通信机制,独立于标准的C/C++语言。
信号与槽可以一对一、一对多、多对一。
信号(signals:)是无返回值、无函数体、可有参的函数(声明),被emit发出后无序地被对应的槽接收然后执行槽函数。
槽(slots:)是普通的类成员函数。
信号与槽的绑定函数原型:
bool QObject::connect ( const QObject * sender, const char * signal,const QObject * receiver, const char * member ) [static]
信号的定义:
在.h中
void mySignal();
void mySignal(int x,int y);
槽的定义:
在.h中声明,在.cpp中实现
void mySignal();
void mySignal(int x,int y);
void MyClassName::mySlot(){
qDebug()<<"mySlot()";
emit mySignalSlot(1,2);//这里发射了一个信号
}
void MyClassName::mySignalSlot(int x,int y){
qDebug()<<"mySlot(int x,int y)"<<x<<" "<<y;
}
信号与槽的绑定:
一般在构造函数中写
connect(ui->pushButton_1, SIGNAL(clicked()),this, SLOT(mySlot()));//假设有一个叫pushButton_1的按钮,按下的信号
connect(this, SIGNAL(MyClassName::mySignal(int,int)),this, SLOT(mySignalSlot(int,int)));
}
信号与槽解除绑定:
bool QObject::disconnect ( const QObject * sender, const char * signal, const Object * receiver, const char * member ) [static]
断掉对象所有信号与槽的绑定:
disconnect(ui->pushButton_1,0,0,0);
或者ui->pushButton_1->disconnect();
断开对象的某个信号与所有槽的绑定:
disconnect( ui->pushButton_1, SIGNAL(clicked()), 0, 0 ) 或者 ui->pushButton_1->disconnect( SIGNAL(clicked()) )
断开两个对象之间的所有信号连接: 这会断开指定发射者对象和接收者对象之间的所有信号连接。
disconnect(myObject, 0, myReceiver, 0); // 或者
myObject->disconnect(myReceiver);
断开特定的信号和槽连接: 这会断开指定发射者对象的特定信号到指定接收者对象的特定槽的连接。
disconnect(myObject, SIGNAL(mySignal()), myReceiver, SLOT(mySlot())); // 或者
myObject->disconnect(SIGNAL(mySignal()), myReceiver, SLOT(mySlot()));
标签:const,Qt,mySignal,int,SIGNAL,信号,disconnect From: https://www.cnblogs.com/trc258/p/18295066