Qt 信号槽及connect第五个参数简介
发布日期:2021-05-04 03:07:37 浏览次数:21 分类:原创文章

本文共 1344 字,大约阅读时间需要 4 分钟。

1.最后一个参数简介

  • Qt::AutoConnection:信号的发送者与信号的接收者在同一线程,则默认使用Qt::DirectConnection;如果不在同一线程,则默认  使用Qt::QueuedConnection。
  • Qt::DirectConnection:信号的发送者与信号的接收者在同一线程中执行,当发出信号后,会马上进入槽函数,看上去就像在信号  发送位置调用了槽函数,在多线程下会比较危险,容易造成崩溃。
  • Qt::QueuedConnection:信号的发送者与信号的接收者不在同一线程中执行,槽函数运行于信号的接收者线程,当发送信号后,  槽函数不会马上被调用,等待信号的接收者把当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个。
  • Qt::BlockingQueuedConnection:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。
  • Qt::UniqueConnection:可以通过按位或(|)与以上四个结合在一起使用。当设置此参数时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。

2.信号-槽的连接方式

1)、connect(this,SIGNAL(),this,SLOT());

例:connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(onClicked()));

2)、connect(this,&this::signal,this,&this::slot);

例:connect(ui.pushButton,&QPushButton::clicked,this,&Widget::onClicked);

3.信号-槽的使用

1)、信号可以连接信号。

2)、信号可以连接槽,一个信号可以连接多个槽,槽的调用顺序是不确定的。

3)、多个信号可以连接同一个槽。

4)、信号与槽都可以被重载、重载后使用6中的第一种方式连接要好一些,因为第一种连接方式能带上参数。

4.断开信号-槽

disconnect(this,SIGNAL(),this,SLOT());

disconnect(this,&this::signal,this,&this::slot);

5.使用信号-槽要求

1)、继承自QObject类,必须声明Q_OBJECT宏

2)、声明信号signals、Q_SIGNALS,一般信号都为void型,没有private、public、protected区分。

例:void sigSendData();

发射信号:emit sigSendData()、或者Q_EMIT sigSendData();

3)、声明槽slots、Q_SLOTS,槽有private、public、protected区分,槽相当于成员函数,可以直接调用

槽可以重载(因为他相当于成员函数)。

6.注意事项

1)、宏定义不能放在信号-槽中。

2)、构造函数不能声明在信号-槽中。

3)、函数指针不能作为信号-槽参数。

上一篇:数据结构-线性表
下一篇:Qt QDialog简介

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月30日 20时54分52秒