QProgressBar不显示进度?

2024-03-31

我在更新进度条时的第一个天真的做法是在正在进行处理的循环中包含以下几行,制作如下内容:

while(data.hasMoreItems())
{
    doSomeProcessing(data.nextItem())

    //Added these lines but they don't do anything
    ui->progressBar->setValue(numberProcessed++);
    ui->progressBar->repaint();
}

我想添加repaint()会在更新 GUI 时暂停执行,但显然事情没那么简单。看完问题后:

QProgressBar错误 https://stackoverflow.com/questions/2184400/qprogressbar-error
进度条不显示进度 https://stackoverflow.com/questions/2513567/progress-bar-is-not-showing-progress-results

看来我必须将数据处理放在不同的线程中,然后将信号从数据处理线程连接到 GUI 线程以更新进度条。我对 GUI 和线程相当缺乏经验,我想知道是否有人可以为我指出正确的方向,即我应该为此使用哪些 Qt 类。我想我需要一个 QThread 对象,但我一直在查看 QProgressBar 文档,但它没有提出线程主题。


正如 @rjh 和 @Georg 所指出的,本质上有两种不同的选择:

  1. 使用强制处理事件QApplication::processEvents() https://doc.qt.io/qt-5/qcoreapplication.html#processEvents, OR
  2. 创建一个thread https://doc.qt.io/qt-5/qthread.html发出可用于更新进度条的信号

如果您正在进行任何重要的处理,我建议将处理移至线程。

关于线程,要了解的最重要的一点是,除了主 GUI 线程(您不启动也不创建)之外,你永远不能直接从线程内更新 GUI.

最后一个参数为QObject::connect() https://doc.qt.io/qt-5/qobject.html#connect-2 is a Qt::连接类型 https://doc.qt.io/qt-5/qt.html#ConnectionType-enum默认情况下考虑是否涉及线程的枚举。

因此,您应该能够创建一个简单的子类QThread进行处理:

class DataProcessingThread : public QThread
 {

 public:
     void run();
 signals:
     void percentageComplete(int);
 };

 void MyThread::run()
 {
    while(data.hasMoreItems())
    {
      doSomeProcessing(data.nextItem())
      emit percentageCompleted(computePercentageCompleted());
    }
 }

然后在你的 GUI 代码中的某个地方:

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

QProgressBar不显示进度? 的相关文章

  • MFC 中位图背景绘制的线程类型

    我有一个 MFC 文档 视图 C 图形应用程序 它将所有绘图都绘制到离屏位图 然后将其复制到 OnDraw 方法中提供的 CDC 指针 在过去的几天里 我一直在寻找将绘图组件放置在单独的工作线程中 这样它就不会停止 GUI 当我执行此操作时
  • 使用/不使用 delegate() 启动线程

    有什么区别 new Thread new ThreadStart SomeFunc and new Thread delegate SomeFunc 这段代码在我的计算机上给出了奇怪的输出 public class A int Num pu
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 是否有一种更简单的方法可以并行运行命令,同时在 Windows PowerShell 中保持高效?

    此自我回答旨在为那些受困于 Windows PowerShell 并由于公司政策等原因而无法安装模块的用户提供一种简单且高效的并行替代方案 在 Windows PowerShell 中 built in可用的替代方案local并行调用是St
  • 将暂停屏幕绘制为播放屏幕上的一层 -LibGdx

    在我的 LibGdx 游戏中 我创建了暂停功能 在玩游戏时 如果我按下暂停按钮 则会显示一个带有恢复按钮的单独屏幕 实际上我想做的是暂停屏幕应该像一层一样出现在游戏屏幕上方 就像下面的游戏截图一样 我只能在我的游戏中使用单独的背景和所有内容
  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • 线程上下文类加载器和普通类加载器的区别

    线程的上下文类加载器和普通类加载器有什么区别 也就是说 如果Thread currentThread getContextClassLoader and getClass getClassLoader 返回不同的类加载器对象 将使用哪一个
  • 匹配集合 Parallel.Foreach

    我正在尝试为 matchcollection 创建一个 Parallel Foreach 循环 它在我构建的刮刀中 我只需要知道在 Parallel Foreach 中放入什么 MatchCollection m Regex Matches
  • C++ GUI 桌面 Windows 应用程序的测试自动化工具/库/框架

    不幸的是 我有一个在 Windows 上运行的 GUI 桌面应用程序 并使用 Borland C 编译器进行编译 我知道这是一项非常古老的技术 但这就是生活 我工作的公司有很多免费的 QTP 许可证 但说实话 我不喜欢这个工具 我想用一些开
  • TinyMCE 的 addButton() 函数中所有可能的设置属性是什么?

    The 文档 http www tinymce com wiki php API3 method tinymce Editor addButton对此还不是很清楚 name 字符串 要添加的按钮名称 设置 对象 带有标题 cmd 的设置对象
  • setSize() 不起作用?

    我有一个程序 需要两个按钮 一个是常规按钮 另一个具有根据鼠标悬停而变化的图片 目前 由于图片很大 JButton自定义也很大 我可以更改自定义的大小并保持图像 和翻转图像 成比例吗 我尝试过 setSize 但它没有任何作用 对于任何反馈
  • 冻结/挂起 tkinter GUI 等待线程完成

    按下按钮后我的界面冻结了 我正在使用线程 但我不确定为什么仍然挂起 任何帮助将不胜感激 提前致谢 class magic def init self self mainQueue queue Queue def addItem self q
  • System.InvalidCastException:指定的强制转换无效

    使用 WatiN 的自动化正在进行中 使用几个并发线程来测试应用程序 很少有线程失败 日志报告 堆栈跟踪显示以下内容 System InvalidCastException Specified cast is not valid at SH
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • Java基于参数的同步(名为互斥锁/锁)

    我正在寻找一种根据接收到的参数来同步方法的方法 如下所示 public synchronized void doSomething name some code 我想要方法doSomething同步基于name参数如下 线程 1 doSom
  • 为什么总是在 mouseDoubleClickEvent 之前调用 mousePressEvent

    请考虑以下代码 include
  • 可感知的最短应用响应延迟是多少?

    用户操作和应用程序响应之间总是会发生延迟 众所周知 响应延迟越低 应用程序瞬间响应的感觉就越强烈 众所周知 高达 100 毫秒的延迟通常是无法察觉的 但是 110ms 的延迟又如何呢 可感知的最短应用响应延迟是多少 我对任何确凿的证据 一般
  • Visual Studio 2010 的“线程”窗口中的 和 [Thread Destroyed] 详细信息

    我一直在尝试调试与一个应用程序的线程相关的一些问题 当我附加到应用程序时 我看到一个像这样的窗口 这个名为 Thread Destroyed 的线程是什么 应用程序代码肯定不会写这个名称 这意味着线程的调用堆栈不可用 采集引擎 线程在应用程
  • INotifyPropertyChanged 和线程

    我有一个基类实现INotifyPropertyChanged protected void OnNotifyChanged string pName if PropertyChanged null PropertyChanged this

随机推荐

  • 在对象列表中的所有名称之间添加逗号

    我试图做一些非常简单的事情 但由于某种原因 我无法有效地完成它并且看起来像我期望的那样好 我有一个人员集合 我需要用逗号分隔具有相同电子邮件地址的人员的姓名 我尝试使用Aggregate函数 但它为所有电子邮件返回一个字符串 我可以在 fo
  • 三星 Galaxy S II AVD(Android 虚拟设备)基本设置?

    我想创建 Samsung Galaxy S II 的 AVD 唯一的目的是使用默认的网络浏览器测试网站 看看它们在纵向和横向模式下的外观如何 由于它是现在最受欢迎的 Android 智能手机 我想通过我的网站对其进行测试 我只想知道最基本的
  • Android EditText下一个焦点

    我有几个 EditTexts 分布在 2 个片段中 其中一个片段具有以下 xml 布局
  • 在 Owin、Katana 和 Nancy 中成功进行 cookie 身份验证后重定向到 ReturnUrl

    我正在使用 Owin Katana 和 Nancy 托管一个带有需要身份验证部分的简单站点 注意我也使用 nuget 包 Nancy MSOwinSecurity app UseCookieAuthentication new Cookie
  • 如何用R代码编织Rmd文件生成word文档

    我已经创建了一个 Rmd 文件 并且我知道如果我转到工具栏并选择 knit to word 它将为我生成一个 Word 文档 我的问题是如何使用 R 代码执行此操作 而无需实际单击顶部工具栏上的 knit to word 选项 我有这段代码
  • 如何使用带有空格的命令名称?

    当 python bot 中的命令之间有空格时 如何使 bot 工作 我知道我们可以使用子命令或on message但是是否还有其他选项可以仅对选定的命令而不是对所有命令执行此操作 下面的代码将不起作用 bot command pass c
  • Java - 按步骤切片任何数组

    在 python 中 我们可以执行以下操作 array 0 1 2 3 4 5 6 7 8 9 10 new array array 3 print new array gt gt gt 0 3 6 9 Java中有类似的东西吗 我一直在寻
  • 朱莉娅中的矢量化“in”函数?

    我经常想要循环遍历数据帧的长数组或列 并且对于每个项目 查看它是否是另一个数组的成员 而不是做 giant list a c j good letters a b isin falses size giant list 1 for i 1
  • 如何一次推送单个docker镜像层?

    我已经开始推送新的镜像 场景是这样的 b57ecdb750f2 Pushing gt 43 57MB 473 9MB 9b7e4da6c261 Pushing gt 18 94kB 21d523b40367 Pushed e18c77c6a
  • TCP/IP 消息帧

    我制作了一个 TCP IP 服务器 客户端 它是异步的 但它连接了消息 如何正确地在开头添加标头 然后在末尾使用字符串生成器来取消连接完整消息 服务器读取消息 Private Sub ReadCallback ByVal result As
  • 在 componentDidMount 中导航-react-router-dom v6

    这是我第一次使用react router dom v6 我对v4很熟悉 我有一个电影列表 每部电影都有一个 id 如果用户在 url 中输入了错误的电影 id 我需要导航到未找到的页面 我使用类组件的问题所以我坚持使用 componentD
  • R - 通过多个 URL 进行网页抓取?带着 rvest 和 purrr

    我正在尝试为我正在从事的项目抓取足球统计数据 并且我正在尝试利用 rvest 和 purrr 来循环遍历 url 末尾的数值 我不确定我错过了什么 但我有一段代码以及不断出现的错误消息 library xml2 library rvest
  • WPF c# .net 框架 4.8 x:绑定

    我读到x Bind 它比Binding 但是在我的应用程序 WPF C 和 NET Framework 4 8 中 当我把x Bind在任何部分 TextBox Text x Bind Visual Studio 对我说 Windows P
  • 随机数:0或1

    我是不是看得太远了 看不到像选择一个数字 0 或 1 这样简单的事情 Random rand new Random if rand NextDouble 0 lnkEvents CssClass selected else lnkNews
  • 创建动态匿名类型变量

    我可以创建一个匿名类型变量 然后添加更多属性吗 E g var x new Name Ahmed 并想添加Age到它 我怎样才能做到这一点 另一个问题 我在一些博客上看到一种类型AnonymousType这个类的名称空间是什么 这是例子ht
  • 自定义 CKEditor 工具栏

    我想自定义CKEditor的工具栏 不过 首先我想要一个工具栏可用选项的完整列表 我搜索了工具栏选项并发现了以下不完整列表 请帮我找到完整的列表 以便我可以根据我的要求进行选择 config toolbar MyToolbar name d
  • 寻找一种算法(二维二分查找的版本)

    简单的问题和已知的算法 我有一个有 100 名成员的大数组 前 X 个成员为 0 其余为 1 找到 X 我通过二分查找来解决这个问题 检查成员 50 如果它是 0 检查成员 75 等等 直到找到相邻的 0 和 1 我正在寻找针对二维相同问题
  • 将 ArrayBuffer 响应转换为 JSON

    在这里 我调用 GetFile 以 ArrayBuffer 对象的形式获取响应 如果我执行 response errors undefined 则在网络选项卡中响应为 errors photoProof Image is not avail
  • 在 postgres 查询中使用 ANY 时,有没有办法保留顺序或数组?

    我希望能够使用进行查询ANY它维护传递给 any 函数的数组的顺序 考虑这个简单的例子 create table stuff id serial value int insert into stuff value values 1 2 3
  • QProgressBar不显示进度?

    我在更新进度条时的第一个天真的做法是在正在进行处理的循环中包含以下几行 制作如下内容 while data hasMoreItems doSomeProcessing data nextItem Added these lines but