Qt信号与槽

信号和槽是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()));

 



posted @   小犟  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示