qt在程序执行的过程中刷新界面

2023-11-16

qt程序执行的过程中,一般是不会仅仅通过setText函数将文字刷新到界面上,如果想根据需要不断地显示文字到主界面上该怎么做呢?

为什么不会刷新界面呢,这是由于调用show函数之后,并不能显示界面,必须调用如下图片的中的a.exec函数才能刷新出界面,而这个函数肯定最后才能执行到,所以一般在主线程中进行的setText向界面上添加文字的操作,只有a.exec()执行后才显示。

自己给自己发信号,编译之后还是在主线程中。因为自己发的信号连接的槽中写个死循环,那主线程也就死掉了,出不来了。自己给自己发信号来刷新界面也是行不通的。

方法一:开启线程,创建一个C++类继承QThread,也能实现,但我认为有以下三个缺点。

    缺点一:

    线程一般是进行一些费时较长的操作。所以主线程就先执行完,先调到a.exec这个函数。支路线程就可以通过发信号,指导主界面上文字的显示了。但是支路线程发一次信号,而槽函数中调用100次setText,那也是100次执行完之后,只显示最后的一个结果,还是看不到中间的过程,那就采取的方式就是发一次信号setText一次。

    缺点二:

    让主界面与线程对象通信,线程发信号(信号参数为要发的文字),主界面槽函数连接这个信号,这样线程->start()就能启动线程,执行重写的run函数,在run函数中发信号,刷新界面了。由于start(),run()都不带参数,那我们线程发信号(信号参数为要发的文字)所需要的参数,就只能从线程执行的函数(比如说转移本地数据到远程数据库)当中获取了。这就意味着,我们创建一个本地数据转移到远程的界面之后,本地数据转移到远程这个函数,不能写在界面同名的那个cpp当中,却要写在另外开的一个线程类中。

   缺点三:

   如果支路线程中,转移数据时,出现了可处理的异常,这时想弹出一个界面,让人工选择判断处理,这是做不到的,因为线程中不能出现ui界面相关的东西,如果出现了,一编译就会报错。

 注:或许你能发信号让主界面弹出ui界面,将选择的结果,再通过发信号通知线程,如果这样的话,就得让线程再给主界面发弹出ui界面的信号后,等待一下选择的结果。如何等待呢?我的等待方法是 

     while(flag)

          QThread::sleep(1)

每隔一秒,看看flag是否为true,如果选择完毕后,主界面发信号回来,将flag赋值false,此时支路线程继续往下走。也可行,比较折腾。

方法二:向界面上添加文字时,setText(文字);然后紧接着 qApp->processEvents(),这句代码能及时刷新界面,a.exec()当中其实调用的也是这个函数。

如果初始化的过程中想不停地刷新界面,那就在构造函数中,刷新界面前,调用this->show,然后qApp->processEvents()。    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt在程序执行的过程中刷新界面 的相关文章

  • C++:头文件中全局函数的多重定义错误

    该函数是全局的 在头文件中定义 暂时地我想把它留在那里 头文件还构成一个具有内联函数的特定类 其中一个函数调用this全局函数 源文件不包含任何有问题的全局函数 有关错误原因的任何提示吗 如果有人感兴趣的话我可以发布代码 mainwindo
  • Dapper 强类型查询返回默认对象值

    刚刚开始使用 Dapper 并喜欢它 我遇到了问题 它返回正确数量的对象 但它们的属性都有默认值 using var dbConnection Connection await dbConnection OpenAsync const st
  • 警告:从指针目标类型中丢弃“const”限定符

    没有const char s意味着 s 是一个指向常量 char 的指针 那么为什么它给我这个警告 我并不是想改变价值观 在第一个函数中警告是return discards const qualifiers from pointer tar
  • 如何使用 C# 打印 pdf

    我在 C 应用程序中使用 进程 打印 pdf 文件 但是我无法获取打印状态 我发现可以通过 System management 和 System printing 与打印机 队列进行交互 我做了很多尝试 但都出错了使用这两个命名空间但无法打
  • boost::interprocess 准备好迎接黄金时间了吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在开发一个由内存映射文件支持的线
  • 在两个 .cpp 文件之间定义全局变量 [重复]

    这个问题在这里已经有答案了 如何在 A cpp 和 B cpp 之间共享 全球化 bool 变量 其中它们都不包含其他 h 文件 他们有其他联合头文件 但彼此没有 我可以在这些共享标头中定义全局变量吗 Thanks 我可以在这些共享标头中定
  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • C++ - 模板专业化和部分专业化

    我一直在互联网和 stackoverflow 上寻找具体的答案 但我似乎找不到 我必须创建一个通用类 然后实现特定的功能 我的具体说明是 您需要使用模板表达式参数以及模板类专业化和部分专业化 我有一个模板类 template
  • 此插件导致 Outlook 启动缓慢

    我正在使用 C NET 4 5 开发 Outlook Addin 项目 但部署后 有时 Outlook 会禁用我的插件 并显示此消息 这个插件导致 Outlook 启动缓慢 我不知道我的插件出了什么问题 这只有很少的代码 并且ThisAdd
  • IClaimsTransformation 未触发

    我尝试过实施一个IClaimsTransformation我在 ASP NET CORE 3 1 Web 应用程序中找到的类 public class ClaimsTransformer IClaimsTransformation publ
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • .NET 的 HttpWebResponse 是否会自动解压缩 GZiped 和 Deflated 响应?

    我正在尝试执行一个接受压缩响应的请求 var request HttpWebRequest HttpWebRequest Create requestUri request Headers Add HttpRequestHeader Acc
  • 语义问题 Qt Creator:命名空间“std”中没有名为“cout”的成员

    我开始使用 Qt Creator 编写代码 对于 C 文件 我遇到很多语义问题 99 是 命名空间 yyy 中没有名为 xxx 的成员cpp文件构建 编译和输出没有问题 如果我点击例如cout 我已链接到 iostream 我是否需要在 Q
  • 如果数组为空,LINQ 返回 null

    public class Stuff public int x other stuff 我有一个IEnumerable
  • fscanf 和 EOF 中的否定扫描集

    我的文件中有一个以逗号分隔的字符串列表 姓名 1 姓名 2 姓名 3 我想跳过所有逗号来阅读这些名字 我写了以下循环 while true if fscanf file my string 1 break 然而 它总是比预期多执行一次 给定
  • 使 C# 编译器相信执行将在成员返回后停止

    我认为目前这是不可能的 或者这是否是一个好主意 但这是我刚才正在考虑的事情 我使用 MSTest 对我的 C 项目进行单元测试 在我的一项测试中 我执行以下操作 MyClass instance try instance getValue
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • 请解释为什么Java和C对此代码给出不同的答案

    public class Test public static void main String args int i 10 i i System out println value of i is i 输出是 10 当我在中执行类似的代码

随机推荐

  • error: ‘connect‘ was not declared in this scope connect(timer, SIGNAL(timeout()), this, SLOT(up

    错误 error connect was not declared in this scope connect timer SIGNAL timeout this SLOT updateslot 解决方法 类要继承 QObject类
  • 015.PyQt5_QWidget_坐标系统&大小位置

    控件的坐标系统 左上角为坐标原点 向右为x轴正方向 向下为y轴正方向 子控件位置是参照父控件 顶层控件则参照桌面 大小位置 先了解一下控件的结构 没有父控件的控件 称之为窗口 一般会被包装成一个框架 相关API 获取大小和位置的API AP
  • linux怎么查看端口被哪个进程占用

    两种查看方法 例如80端口 1 使用fuser命令 可以直接在Linux上查看指定端口被哪个进程占用了 语法为 fuser v 80 tcp 运行结果里会包含进程的名字和id 2 使用lsof命令 能根据指定端口找到对应的进程信息 语法为
  • STEAM课程的五大教学策略

    格物斯坦小坦克就stem课程的五大教学策略来讲一讲 激发求知欲 培养思维技巧是STEAM课程活动的重点之一 先玩后做 即先呈现成果的乐趣再探索制作 让学生在实践活动中体验和理解相关的概念 力求最match大程度地激发学生的学习需求和求知欲
  • 虚拟机安装与双系统(win10+ubuntu)安装及其他

    近来由于想要尝试下双系统 所以整了个虚拟机玩玩 在真实机器上装双系统方法类似 不过在虚拟机上装要安全些 在此记录下过程 以资日后参考 博客原创性是没有啥原创性的 各处借花献佛 算是一个总结性博客吧 文章目录 1 虚拟机安装 2 一个跨浏览器
  • buck电路_通过DAC调节BUCK电路输出电压

    产品开发中 经常有需要调节DC转换器输出电压的需求 例如一些DC可调电源 或者直流有刷电机的调速等场合 上图中我们采用LM2596S ADJ作为电源模块 用带DAC功能的单片机或专用DAC芯片调节BUCK转换器的电压输出 我们都知道常见的D
  • 网络安全知识试题

    网络安全知识竞赛题库 1 维基解密 网站的总部位于 没有公开办公地址 没有公布办公邮箱 6 苹果的icloud存在安全策略漏洞 苹果公司采用限定账户每天登录次数方法进行弥补 8 在享受云服务带来的便捷时 数据安全的主动权掌握在手里 云服务商
  • JS中模板字符串,怎么设置自动补全html标签

    我们在写代码的时候经常会用到模板字符串 但是没有代码提示 写的还是挺难受的 有一种方法可以解决这个问题 我们在VScode中打开设置 找到任一一个settings json文件打开 将这下面这些代码粘贴在后面 emmet triggerEx
  • 差分数组是个啥?能干啥?怎么用?(差分详解+例题)

    差分数组是个啥 差分数组很明显就是个数组呗 本菜鸡学的比较浅 先说一下我自己认识的差分数组吧 先解释一下什么是 差分 差分其实就是数据之间的差 什么数据的差呢 就是上面所给的原始数组的相邻元素之间的差值 我们令 d i a i 1 a i
  • 【Linux】Linux Systemd 启动守护进程

    1 概述 转载 http www ruanyifeng com blog 2016 03 systemd tutorial commands html 去看原文吧 排版比较好 这里转载防丢失 Systemd 是 Linux 系统工具 用来启
  • 常用的大数据技术有哪些?

    大数据技术为决策提供依据 在政府 企业 科研项目等决策中扮演着重要的角色 在社会治理和企业管理中起到了不容忽视的作用 很多国家 如中国 美国以及欧盟等都已将大数据列入国家发展战略 微软 谷歌 百度以及亚马逊等大型企业也将大数据技术列为未来发
  • Kafka Producer 发送数据

    Kafka Producer 发送数据 1 生产者概览 1 不同的应用场景对消息有不同的需求 即是否允许消息丢失 重复 延迟以及吞吐量的要求 不同场景对Kafka生产者的API使用和配置会有直接的影响 2 Kafka发送消息的主要步骤 消息
  • 配置 RT-Thread 的工程目录

    1 前言 RT Thread 基于 Scons 的包管理非常方便让我们使用 RT Thread 进行开发 但在实际工程中将应用代码写到 RT Thread 官方提供的 bsp 目录下面会非常不便于使用 无法使用自己 git 工具进行代码管理
  • 使用IntelliJ IDEA通过Maven创建Spring的HelloWord(超详细图文教程)

    在JavaWeb中 随着Intellij IDEA的广泛使用 所用的Maven插件在以后的JavaEE中开发也将是个趋势 通过Maven仓库 我们可以不用下载所关联的Jar包就可以进行引用 还是很方便整个工程管理的 因为自己也是第一次接触S
  • 运算符相关知识点

    字符串转数值类型新增 隐式转换 隐式转换 正号 var a 10 console log typeof a console log typeof a 0 隐式转换 console log typeof a 1 隐式转换 console lo
  • iosArchive上传到AppStoreConnect

    首先 我们需要一个IOS开发平台上有一个开发者账号 https developer apple com programs enroll 这个平台可以注册个人账号或者公司账号 公司账号需要的资料更麻烦一点 但是功能也更多 在做好的开发者账号的
  • Win10家庭版远程桌面工具RDP Wrapper

    Win10家庭版远程桌面工具RDP Wrapper 由于win10家庭版官方不支持使用远程控制mstsc工具 但是使用RDP Wrapper可以解决该问题 解决办法 链接
  • uniapp 地图组件(map)的使用总结

    总结一下本次在uniapp中使用map遇到的一些问题 文章分别是基础 定位图标 获取自身经纬度 通过经纬度获取当时城市信息 首先先看成品 首先引入map组件
  • C++查看 IEEE 754 浮点数格式的代码

    把内容过程中较好的一些内容片段备份一次 下边资料是关于C 查看 IEEE 754 浮点数格式的内容 for binary floating point numbers IEEE 754 is to use a union as shown
  • qt在程序执行的过程中刷新界面

    qt程序执行的过程中 一般是不会仅仅通过setText函数将文字刷新到界面上 如果想根据需要不断地显示文字到主界面上该怎么做呢 为什么不会刷新界面呢 这是由于调用show函数之后 并不能显示界面 必须调用如下图片的中的a exec函数才能刷