Qt 信号和槽连接方式

常量 描述
Qt::AutoConnection (默认)如果接收方位于发出信号的线程中,则使用QtDirectConnection。否则,使用QtQueuedConnection。连接类型在信号发出时确定。
Qt::DirectConnection 当发出信号时立即调用插槽。插槽在信号线程中执行。
Qt::QueuedConnection 当控件返回到接收方线程的事件循环时调用插槽。插槽在接收器的线程中执行
Qt::BlockingQueuedConnection 与Qt::QueuedConnection相同,只是发出信号的线程阻塞,直到插槽返回。如果接收方位于发出信号的线程中,则不能使用此连接,否则应用程序将死锁。
Qt::UniqueConnection 这是一个可以使用按位OR与上述任何一种连接类型组合的标志。 当设置Qt :: UniqueConnection时,如果连接已经存在,QObject :: connect()将失败(即,如果相同的信号已连接到同一对对象的相同插槽)。 这个标志在Qt 4.6中引入。

在 多线程中发射信号 ,在主线程中采用 lambda 表达式接收该信号。

  1. 采用默认方式时,lambda 在多线程中运行。
  2. 采用 DirectConnection 时,lambda 在多线程中运行。
  3. 采用 QueuedConnection 时,lambda 在主线程中运行。
  4. 采用 BlockingQueuedConnection 时,lambda 在主线程中运行。

Qt::UniqueConnection 标志可以用来方式重复连接同一个信号和槽。

了解以上信号和槽的连接方式以后,可以用这个函数原型来更改接收方执行函数的线程

[static] QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
    QObject::connect(this,&Widget::newData,this,[&](QString text){
qDebug() << "slot thread ID:" << QThread::currentThreadId();
QMessageBox::information(this,"test",text);
},Qt::QueuedConnection);

qt 如何使用 lamda 表达式接收线程中发射的数据,并在里面更新 UI ?的更多相关文章

  1. lamda表达式在EF中的应用

    1.条件查询 _dbContext.TBEntity.Where(p=>p.ID=ID) 2.排序 升序  _dbContext.TBEntity.Where(p=>p.ID=ID).Or ...

  2. java8新特性lamda表达式在集合中的使用

    1.利用stream().forEach()循环处理List; List<String> list = Lists.newArrayList();//新建一个List 用的google提供 ...

  3. Clinet/Server在工作线程中刷新页面数据的方法

    Worker线程不能修改UI线程的状态(比如文本框里面的内容).解决的办法是写一个用来更新文本框内容的函数,然后在Worker线程里面通过BeginInvoke来利用delegate调用这个函数更新文 ...

  4. vue中修改了数据但视图无法更新的情况

    数组数据变动:我们使用某些方法操作数组,变动数据时,有些方法无法被vue监测,有些可以 Vue包装了数个数组操作函数,使用这些方法操作的数组去,其数据变动时会被vue监测: push() pop() ...

  5. vue中修改了数据但视图无法更新的情况[转载]

    我们有时候常碰到vue中明明修改了数据,但是视图无法更新,因此我总结了一点点碰到此类的情况: 1.v-for遍历的数组,当数组内容使用的是arr[0].xx =xx更改数据,vue无法监测到 数组数据 ...

  6. vue中修改了数据但视图无法更新的情况(转)

    原文地址:https://blog.csdn.net/qq_39985511/article/details/79778806

  7. Winform中使用Reactivex代替BeginInvoke/Invoke来更新UI数据

    首先通过Nuget安装包System.Reactive. ReactiveX项目 Url: https://github.com/Reactive-Extensions/Rx.NET public p ...

  8. WPF 中的 经典的ModelView 通知页面更新 UI

    view model ------------------------------------------------------------------------------ using HPCo ...

  9. 关于Qt在子线程中使用QMessageBox的折衷方法

    Qt将所有GUI相关的处理都限制在主线程中,这么做有助于防止意想不到的访问冲突产生,但也限制了线程中某些简单的UI交互的实现,比如QMessageBox. 因为QMessageBox必须在主线程中打开 ...

随机推荐

  1. Android 虚线实现绘制 - DashPathEffect

    前言: 通过view绘制虚实线,采用Android自带API--DashPathEffect.具体使用请参考更多的链接,这里只是讲解. 构造函数 DashPathEffect 的构造函数有两个参数: ...

  2. linux性能相关的各个环节

  3. lambda表达式以及stream流式api用法

    https://www.cnblogs.com/aoeiuv/p/5911692.html 这篇文章讲的简单全面,记录下 kotlin一些符号的用法 https://www.cnblogs.com/l ...

  4. No enclosing instance of type TestGson is accessible. Must qualify the allocation with an enclosing instance of type TestGson (e.g. x.new A() where x is an instance of TestGson).

    main方法中实例化内部类报错: public class TestGson { public static void main(String[] args) { Gson gson=new Gson ...

  5. python+django+pycharm 环境配置 (window7)

    一.python环境配置 登录python官网,下载windows版的python,本项目使用32位的python2.7.6,下载地址: http://www.python.org/ftp/pytho ...

  6. 分布式架构的CAP原理

    CAP 定理的含义   一.分布式系统的三个指标 1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标. Consistency Availability Parti ...

  7. Python中的"Special Method"

    The first thing to know about special methods is that they are meant to be called by the Python inte ...

  8. Ubuntu16.04安装x11VNC远程桌面

    1. 安装x11vnc sudo apt-get install x11vnc 2. 设置密码 x11vnc -storepasswd 3. 修改配置文件 sudu vim /lib/systemd/ ...

  9. HAProxy基于Centos6.5安装及配置

    一.使用2.6内核Linux,配置sysctl参数 vi /etc/sysctl.conf #haproxy confignet.ipv4.tcp_tw_reuse = 1net.ipv4.ip_lo ...

  10. ApplicationContext.xml模板

      <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www. ...