qt 如何使用 lamda 表达式接收线程中发射的数据,并在里面更新 UI ?
Qt 信号和槽连接方式
| 常量 | 描述 |
|---|---|
| Qt::AutoConnection | (默认)如果接收方位于发出信号的线程中,则使用QtDirectConnection。否则,使用QtQueuedConnection。连接类型在信号发出时确定。 |
| Qt::DirectConnection | 当发出信号时立即调用插槽。插槽在信号线程中执行。 |
| Qt::QueuedConnection | 当控件返回到接收方线程的事件循环时调用插槽。插槽在接收器的线程中执行 |
| Qt::BlockingQueuedConnection | 与Qt::QueuedConnection相同,只是发出信号的线程阻塞,直到插槽返回。如果接收方位于发出信号的线程中,则不能使用此连接,否则应用程序将死锁。 |
| Qt::UniqueConnection | 这是一个可以使用按位OR与上述任何一种连接类型组合的标志。 当设置Qt :: UniqueConnection时,如果连接已经存在,QObject :: connect()将失败(即,如果相同的信号已连接到同一对对象的相同插槽)。 这个标志在Qt 4.6中引入。 |
在 多线程中发射信号 ,在主线程中采用 lambda 表达式接收该信号。
- 采用默认方式时,lambda 在多线程中运行。
- 采用
DirectConnection时,lambda 在多线程中运行。 - 采用
QueuedConnection时,lambda 在主线程中运行。 - 采用
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 ?的更多相关文章
- lamda表达式在EF中的应用
1.条件查询 _dbContext.TBEntity.Where(p=>p.ID=ID) 2.排序 升序 _dbContext.TBEntity.Where(p=>p.ID=ID).Or ...
- java8新特性lamda表达式在集合中的使用
1.利用stream().forEach()循环处理List; List<String> list = Lists.newArrayList();//新建一个List 用的google提供 ...
- Clinet/Server在工作线程中刷新页面数据的方法
Worker线程不能修改UI线程的状态(比如文本框里面的内容).解决的办法是写一个用来更新文本框内容的函数,然后在Worker线程里面通过BeginInvoke来利用delegate调用这个函数更新文 ...
- vue中修改了数据但视图无法更新的情况
数组数据变动:我们使用某些方法操作数组,变动数据时,有些方法无法被vue监测,有些可以 Vue包装了数个数组操作函数,使用这些方法操作的数组去,其数据变动时会被vue监测: push() pop() ...
- vue中修改了数据但视图无法更新的情况[转载]
我们有时候常碰到vue中明明修改了数据,但是视图无法更新,因此我总结了一点点碰到此类的情况: 1.v-for遍历的数组,当数组内容使用的是arr[0].xx =xx更改数据,vue无法监测到 数组数据 ...
- vue中修改了数据但视图无法更新的情况(转)
原文地址:https://blog.csdn.net/qq_39985511/article/details/79778806
- Winform中使用Reactivex代替BeginInvoke/Invoke来更新UI数据
首先通过Nuget安装包System.Reactive. ReactiveX项目 Url: https://github.com/Reactive-Extensions/Rx.NET public p ...
- WPF 中的 经典的ModelView 通知页面更新 UI
view model ------------------------------------------------------------------------------ using HPCo ...
- 关于Qt在子线程中使用QMessageBox的折衷方法
Qt将所有GUI相关的处理都限制在主线程中,这么做有助于防止意想不到的访问冲突产生,但也限制了线程中某些简单的UI交互的实现,比如QMessageBox. 因为QMessageBox必须在主线程中打开 ...
随机推荐
- vim gdb使用
vim 8.0以上 :packadd termdebug :termdebug shell gdb中运行help all查看所有命令帮助 显示汇编窗口 layout asm
- 数据结构 java概况
数据结构可以分为三种结构: 线性结构: 数组:栈:队列:链表:哈希表 树结构: 二叉树,二分搜索树,AVL,红黑树,Treap,Splay,堆,Trie,线段树,K-D树,并查集,哈夫曼树 图结构 邻 ...
- windows10安装nodejs 10和express 4
最进做一个个人博客系统,前端用到了semanticUI,但是要使用npm工具包,所以需要安装nodejs,nodejs自带npm 下载 去官网下载自己系统对应的版本,我的是windows:下载 可以在 ...
- HTML基础iframe 实现聚合浏览器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- C#基础知识之类和结构
虽然项目中一直在使用类.结构体等类型,仔细琢磨,还真无法系统的说出个所以然.记录一下类.结构体.类和结构体区别 一.类 对于类,大家都特别熟悉.简单的介绍一下类的结构,然后记录一下Class需要注意的 ...
- easyapi
create database easyrec; #为easyrec初始化用户名跟密码grant index, create, select, insert, update, drop, delete ...
- null,blank,default
null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空. blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面 ...
- leetcode-167周赛-1291-顺次数
题目描述: 自己的提交: class Solution: def sequentialDigits(self, low: int, high: int) -> List[int]: l,h = ...
- Halo(九)
跨域问题 域名A(http://www.a.com)的 Web 应用程序中, 通过标签引入了域名B(http://ww.b.com)站点的某图片资源(http://www.b.com/image.jp ...
- js手机号码中间用星号代替。银行卡后四位之外改为星号
如手机号码13123456789,中间四位用'*'代替 var phone='13123456789' 方法1(字符串的截取): ,)+); 方法2(正则表达式): })\d{}(\d+)/,&quo ...