Qt之信号槽(一:基本应用)

信号槽连接实例

一:信号槽使用教程代码

//头文件
class MyClass : public QObject 
{ 
    //Q_OBJECT是个宏,要想使用信号槽必须是QObject的子孙类,且必须在头文件中使用这个宏
    Q_OBJECT 
signals: //信号定义区     信号也是函数,但是不用实现
    void mySignal();
    void mySignal_2(QString arg1);
private slots:
    void myslot();
    void myslot(QString arg1);
};

//cpp文件
MyClass::MyClass(){
    //信号槽的正常连接  参数相等
    connect(this, SIGNAL(mySignal()), this, SLOT(myslot()), Qt::AutoConnection);
    connect(this, SIGNAL(mySignal_2(QString)), this, SLOT(myslot(QString)), Qt::AutoConnection);
    //信号一定要比槽函数的参数多
    connect(this, SIGNAL(mySignal_2(QString)), this, SLOT(myslot()), Qt::AutoConnection);

//信号的发送
    emit myslot();
    QString arg;
    emit myslot(arg);
}

void MyClass::myslot(){

}
void MyClass::myslot(QString arg1){
}

 

二:信号槽的连接

//信号槽的连接方式一:
//参数一共有五个:分别是发送者,信号的地址,接收者, 响应的参数  连接类型
connect(QObject*sender, QObject::signal, QObject*receiver, QObject::method,Qt::ConnectionType type = Qt::AutoConnection) 

//信号槽的连接方式二: 参数和一相同,只是采用了:SIGNAL(),SLOT()的表现形式
connect(QObject*sender, SIGNAL(signal()), QObject*receiver, SLOT(method()), Qt::ConnectionType type = Qt::AutoConnection) 

//信号槽的连接方式三:  五参数的lambda表达式
connet(QObject *sender,QObject::signal,[&](){;})

三:信号槽连接的第五个参数介绍

连接类型参数介绍
Qt::AutoConnection自动连接:默认的方式。信号发出的线程和糟的对象在一个线程的时候相当于:DirectConnection, 如果是在不同线程,则相当于QueuedConnection
Qt::DirectConnection直接连接:相当于直接调用槽函数,但是当信号发出的线程和槽的对象不再一个线程的时候,则槽函数是在发出的信号中执行的。
Qt::QueuedConnection队列连接:内部通过postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。如果信号参数是引用类型,则会另外复制一份的。线程安全的。
Qt::BlockingQueuedConnection阻塞连接:此连接方式只能用于信号发出的线程 和 槽函数的对象不再一个线程中才能用。通过信号量+postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。但是发出信号后,当前线程会阻塞,等待槽函数执行完毕后才继续执行。
Qt::UniqueConnection防止重复连接。如果当前信号和槽已经连接过了,就不再连接了。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值