qt常见问题

2023-11-03

1所有能够接受和发送消息的class必须存在有消息循环的线程环境中。

2对象的消息处理默认环境是是存在于创建这个对象的线程环境中的。

对于第二点如何理解

比如

subthread::subthread()

{

connect(this,sigA,this,slotA);

}

subthread::run()

{

printf tid

exec();

}

void slotA()
{

 printf 线程id

}

UI_thread()

{
    psub=new subthread();
    psub->start()
    Sleep(5000)
    emit psub->sigA
}

在ui线程中创建了一个线程psub,运行这个线程,等待5s线程运行了以后。执行emit psub->sigA

执行 slotA函数

此时打印的线程id应该是 UI_thread的线程。

因为new的这个行为是在UI线程中执行的,所以默认的消息循环是属于UI线程的。因此在slotA中执行的操作是属于UI线程环境中的。

明显run中的id是subthread的id.此时如果有run中和slotA中同时操作一个变量,那么就会出现同步问题。

如果需要slotA中的环境在subthread中执行。那么就用到MoveToThread (this)。这里的this是psub。

object->MoveToThread(threadA)表示,将当前object对象的亲和性归属到ThreadA中。也就是让threadA来处理object的消息循环,

我们只需要在subthread的构造函数中添加

this->MoveToThread(this)。 表示让subthread对象使用自己的消息处理线程。这样就可以了。

1、事件循环一般用exec()函数开启。QApplicaion::exec()、QMessageBox::exec()都是事件循环。其中前者又被称为主事件循环。

 

事件循环首先是一个无限“循环”,程序在exec()里面无限循环,能让跟在exec()后面的代码得不到运行机会,直至程序从exec()跳出。从exec()跳出时,事件循环即被终止。QEventLoop::quit()能够终止事件循环。

 

其次,之所以被称为“事件”循环,是因为它能接收事件,并处理之。当事件太多而不能马上处理完的时候,待处理事件被放在一个“队列”里,称为“事件循环队列”。当事件循环处理完一个事件后,就从“事件循环队列”中取出下一个事件处理之。当事件循环队列为空的时候,它和一个啥事也不做的永真循环有点类似,但是和永真循环不同的是,事件循环不会大量占用CPU资源。

 

事件循环的本质就是以队列的方式再次分配线程时间片。

 

2、事件循环是可以嵌套的,一层套一层,子层的事件循环执行exec()的时候,父层事件循环就处于中断状态;当子层事件循环跳出exec()后,父层事件循环才能继续循环下去。

另外,子层事件循环具有父层事件循环的几乎所有功能。Qt会把事件送到当前生效的那个事件循环队列中去,其中包括Gui的各种事件。所以用户在主线程中执行各种exec()(如QMessageBox::exec(),QEventLoop::exec())的时候,虽然这些exec()打断了main()中的QApplication::exec(),但是Gui界面仍然能够正常响应。    

 

3、如果某个子事件循环仍然有效,但其父循环被强制跳出,此时父循环不会立即执行跳出,而是等待子事件循环跳出后,父循环才会跳出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt常见问题 的相关文章

  • QT学习_02_Lambda表达式——槽函数的正确打开方式

    1 带参数的信号 假设发送的信号带参数 信号是可以重载的 我用同一个函数名称 一个带参数 一个不带参数 在点击 切换到主窗口 按钮的时候 同时发射这两个信号 subwidget h ifndef SUBWIDGET H define SUB
  • Qt 5 架构和特点

    Qt 5 模块构架 模块 功能 Qt Core Qt 5 的核心类库 每个模块都建立在Core上 Qt GUI 图形用户界面开发的最基础的类库 Qt Widgets 提供c 用户界面部件 是对Qt GUI的拓展 Qt SQL 对数据库进行操
  • Qt创建的子线程不断循环,主线程界面一直处于无响应状态

    说明 今天用子线程处理数据 但只创建了子线程 还没有来得及让子线程处理大量的数据 在子线程只作了简单处理 发现主线程界面一直不能响应 在主线程让子线程参数isStop true 也跳不出循环 while isStop emit mySign
  • Qt新建项目No valid kits found解决思路

    第一次用Qt Creator创建Project时 进入Kit Selection窗口后 会提示No Valid kits found Please add a kit in the options
  • QT 在release 模式下构建项目使用断点调试

    pro文件内 release断点测试 QMAKE CXXFLAGS RELEASE QMAKE CFLAGS RELEASE WITH DEBUGINFO QMAKE LFLAGS RELEASE QMAKE LFLAGS RELEASE
  • qt控件学习(4)

    文章目录 QTabWidget 控件 QMenu QToolBar 控件 QSystemTrayIcon 任务栏控件 QTabWidget 控件 mainwindow h ifndef MAINWINDOW H define MAINWIN
  • 笔记——关于QLabel重写paintEvent有背景图绘制数据无法显示的问题

    一般重写paintEvent时都会调用基类本身的paintEvent来刷新我们的界面 在自定义QLabel时 当想给自定义Label设置背景图时 若将QLabel paintEvent放在代码块末尾 那么会导致绘制数据无法显示 解决方法将其
  • QT学习 之 QwtPlot(数学绘图)

    QT对于统计图像 函数图像等的绘制是没有相关组件的帮助的 只有利用手工绘制图片 QwtPlot是用来绘制二维图像的widget 继承自QFrame 和 QwtPlotDict 不过严格的说来 它只是一个视图窗口 真正的绘制设备是它的中心部件
  • QObject::connect()函数使用的几个注意点

    一 connect 函数有且只能在QObject类里面和QObject派生类里面使用 connect 函数有且只能在QObject类里面和QObject派生类里面使用 自己新建的类里面 基类不是QObject类和其QObject派生类 使用
  • QT5.14搭建MSVC(VS2017) x86 以及64位编译器开发环境搭建(GDB配置)

    一 引言 今天想要使用QT echarts实现炫酷的界面 但是一开始想的很简单 查找资料才发现 我之前一直使用的MinGw编译器无法使用QWebEngine 这个就很头秃 懵逼 今天搞了快一整天配置环境 中间找了很多文章看 最后试了好多次才
  • Qt图形化界面学习之资源文件添加

    首先 我们开始试着用ui界面来进行上节的功能实现 菜单栏 工具栏 状态栏 在菜单栏的二级菜单设计中 名字只能输入英文 创建后再修改为中文 因为文件创建action的时候是按照你输入的英文创建的 我们可以修改text属性来修改名字 改为中文
  • 新建的QT项目没有menubar、statusbar或者toolbar

    新建的QT项目没有menubar statusbar或者toolbar 右击窗口对象即可添加
  • QT学习—五种直接连接信号槽的连接方式

    一 信号与槽机制 特别鸣谢B站大轮明王讲Qt的讲解 大轮明王讲Qt的个人空间 哔哩哔哩 bilibili 信号与槽机制 Signal and Slot 是一种在软件开发中广泛使用的通信机制 主要用于处理事件驱动的程序设计 它是Qt框架中的一
  • QT基本使用

    目录 一 QWidget QDialog QMainWIndow的异同点 二 信号与槽 1 信号与槽 2 自动关联信号与槽 3 自定义信号与槽 设定槽 设定信号 四 模态 非模态窗口 1 新窗口的创建 2 模态 非模态窗口的创建 五 加载资
  • Qt6教程之三(2) QT使用qss

    QSS是Qt Style Sheets的缩写 中文含义是Qt样式表 它用来自定义控件外观的机制 QSS与网页中使用的CSS非常相似 可以把QSS看作是CSS在Qt领域领域的定制版本 QSS的语法规则 选择器 规则定义1 规则2 规则n 如下
  • QT报错:multiple definition of 'qMain(int ,char**)'

    QT导入项目时 出现重定义错误 今天在导入人家完整的QT项目时 在导入之后 点击构建 出现很多重定义的问题 具体如下图所示 出现重定义错误 经过网上查找解决办法 得知是因为重复的导入项目 导致项目中项目文件重复引用了一些文件 如下图所示 解
  • QT中的事件

    目录 1 QT事件 1 1 事件介绍 1 2 事件的处理 2 键盘事件 2 1 keyPressEvent 2 1 1 判断某个键按下 2 1 2 组合键操作 3 鼠标事件 3 1 鼠标单击事件 3 2 鼠标释放事件 3 3 鼠标双击事件
  • QT---UI的使用

    目录 一 UI的介绍 二 UI的使用 一 UI的介绍 UI的使用是指通过拖拽控件来绘制界面 二 UI的使用
  • QT使用emit时发生内存泄露

    1 场景 在QT里面使用多线程进行编程时 子线程执行的函数里面使用了emit发生了内存泄露 2 主要原因 在使用子线程时 线程使用了join 来等待子线程完成 这样使用emit也不会发送信号 因为join 是阻塞的 必须等待当前线程完成 3
  • 32位的Ubuntu16.04安装QT5.8,并编译实现window环境下的代码

    开始 这是本人的第一篇博客 自己经常在网上找问题的解决方法 发现有些问题很难找到合适的解决方法 所以自己也写写 希望能帮助到大家 有错的地方大家指出 安装环境 linux环境 Ubuntu16 04 32位系统 使用apt get命令进行安

随机推荐

  • ECharts大屏可视化

    文章目录 ECharts大屏可视化 一 项目概述 1 1 项目介绍 1 2 项目架构 1 3 使用环境 二 数据获取 1 获取腾讯数据 1 1数据爬取 1 2数据存储 创建数据库 连接数据库 插入和更新数据 2 爬取百度热搜数据 2 1数据
  • 使用tps5430制作正负DC-DC降压电源,tps7a47和tps7a33制作正负LDO线性电源

    今天 小刚我制作了一款DC DC和LDO线性电源 其输入范围为10V 35V 配置4个电源输出端分别为 开关电源tps5430 正负12V 正负5V LDO线性电源tps7a47和tps7a33 正负5V 正负3 3V 第一部分TPS543
  • 飞桨AI套件首秀:新版PaddleX精选模型产业落地实战

    近日 飞桨AI套件PaddleX 精选产业实用模型的一站式开发套件正式上线AI Studio星河社区 也发布了 Windows 本地端 助力人工智能技术在各领域的实际应用 PaddleX具有优质的算法库 便捷的开发方式 高效的模型部署 丰富
  • pass软件计算样本量_R语言元分析专题第十五章:计算效应量的大小

    尽管通过meta软件包调用metabin或metacont函数 可以计算出每个研究中的个体效应大小 individual effect sizes 但一些论文却没有以正确的格式报告这些效应量数据 特别是 一些较老的文章可能只报告了t检验 A
  • c++学习之c++对c的扩展1

    目录 1 面向过程与面向对象的编程 2 面向对象编程的三大特点 3 c 对c的扩展 1 作用域运算符 2 命名空间 1 c 命名空间 namespace 2 命名空间的使用 1 在不同命名空间内可以创建相同的名称 2 命名空间只能在全局范围
  • 【QT学习】结构体在qt的传递

    1 自定义结构体使用信号槽在qwidget中传递 typedef struct tagPoint tPos tIn QHash
  • 通达信缠论完整指标_【画线参数调整、拔地而起指标介绍、走势完美实战案例】疯狂的缠论通达信版自动画线选股指标更新:很小但很有用的更新...

    导读 文章包含4部分 通达信版画线选股指标的画线参数都可以手动调整了 通达信版画线选股指标子指标介绍 拔地而起 走势完美策略实战案例 走势完美策略实战要点 理论 1 通达信版自动画线选股指标更新 画线参数都可以手动调整 疯狂的缠论通达信版自
  • Java 实现图片转base64

    一 自己实现byte数组拷贝 public class Base64Util base64图片 存储的byte数组 private byte baseByte new byte 0 public static void main Strin
  • Skill: UltraEdit: ue64ctmn.dll 删除不掉

    卸载UltraEdit时ue64ctmn dll删除不掉 原因 自动生成鼠标右键菜单项 该文件被鼠标右键menu占用 解决 在运行中输入 regedit 展开 HKEY CLASSES ROOT shellex ContextMenuHan
  • 基于uniapp实现掘金的微信小程序模版小项目

    代码地址 1 前言 涉及的框架及技术 uniapp vant animate vuex iconfont websocket 2 启动流程 直接用Hbuilder打开 然后点击运行 gt 运行到小程序模拟器 gt 微信开发者工具 启动之后如
  • 用AI写代码 -- Github Copilot测试

    截图为copilot官网 要使用copilot 首先要安装vscode 下载copilot插件 下载完了以后 并不能马上使用 还需要申请内测账号 前几天 我终于收到内测账号通过的邮件 趁着今天在家 连忙打开vscode测试一下 爬图片 我们
  • STL——String类(2)成员函数详解

    目录 前言 一 String的成员函数 1 基本成员函数 代码实验 实验结果 类对象每次扩容后的capacity数据展示 1 2 resize 调整字符串大小 1 3reserve 请求更改该对象的容量capacity值 代码实验 前言 S
  • 新建的maven项目没有maven依赖

    把该项目转成动态web项目 出现web图标后再右键项目 点击属性 添加maven依赖 删除项目 不删源码 重新引入后可出现maven依赖 有时未成功 可重新添加maven依赖 这时在pom xml文件中添加的依赖也会进入到maven依赖中
  • 微信小程序怎么设置全局背景颜色?

    其实啊 这个可简单了 有手就行 首先 打开微信小程序开发工具 其次 找到全局配置app json文件 修改 navigationBarBackgroundColor 222 这是修改的导航栏的颜色 接着 在app wxss文件中 配值pag
  • JAVA微服务场景下分布式日志收集排查问题实战

    问题产生的根由 不同服务的日志存在哪里 我们怎么去排查线上问题 问题场景 我们部署的java服务可能有几十个 不同的项目里面他是看不到别的服务的日志 只有服务的返回msg消息 相比传统的单体服务来说 排查问题和解决问题的原因相对比较复杂和麻
  • 《Kafka权威指南》——初识 Kafka

    发布与订阅消息系统 在正式讨论Apache Kafka 以下简称Kafka 之前 先来了解发布与订阅消息系统的概念 并认识这个系统的重要性 数据 消息 的发送者 发布者 不会直接把消息发送给接收 者 这是发布与订阅消息系统的一个特点 发布者
  • 性能测试很难吗?一文带你学会性能测试核心流程和概念

    在很多人的概念中 性能测试就是使用Loadrunner Jmeter等工具进行压测 然后得到测试结果即可 但仔细想想 对谁进行测试 测试目的是什么 监测指标有哪些 得到的结果如何分析 怎样的结果算通过 等等 所以使用工具压测只是性能测试最基
  • 泰迪杯C题第二问

    面包多 https mianbaoduo com o bread Ypmbl5Zq
  • java 8 新特性,接口默认方法、lambda表达式、Optional、stream

    java 8 新特性 当面试官让我说几个java 8 的新特性 我巴拉巴拉把知道的都说了 然而 面试官接着问 stream里面如果按照分类过滤怎么做呢 map 是什么 嘀 扫码成功 哎呀 地铁里面的空调真不错啊 真不错 果然 只做到了解是不
  • qt常见问题

    1所有能够接受和发送消息的class必须存在有消息循环的线程环境中 2对象的消息处理默认环境是是存在于创建这个对象的线程环境中的 对于第二点如何理解 比如 subthread subthread connect this sigA this