qt-QProgressBar 不动,多线程实现进度条

问题描述

QProgressBar 不动,多线程实现进度条

class ProcDlg : public QRunnable
{
public:
ProcDlg(QProgressBar* progressBar);

void run();

void setVal(int val);

private:
QProgressBar* m_ProgressBar;
int m_val;
};

ProcDlg::ProcDlg( QProgressBar* progressBar)
{
m_ProgressBar = progressBar;
m_val = 0;
}

void ProcDlg::setVal(int val)
{
m_val = val;
}

void ProcDlg::run()
{

while (m_val <= 100)
{
    QMetaObject::invokeMethod(m_ProgressBar, "setValue",
                              Qt::QueuedConnection, Q_ARG(int, m_val));

    QThread::sleep(1);

    if(m_val == 100)
    {
        break;
    }
}

}

class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_pushButton_clicked();

private:
Ui::MainWindow ui;
QProgressBar procBar;
ProcDlg
task;
};

void MainWindow::on_pushButton_clicked()
{
task = new ProcDlg(&procBar);
procBar.show();
QThreadPool::globalInstance()->start(task);

int i = 1;
for(i = 1; i <= 10; i++)
{
    task->setVal(i*10);
    QThread::sleep(2);
}

}

QProgressBar一直都不动,这是什么原因啊?

解决方案

http://www.cnblogs.com/guoyiqi/archive/2011/07/30/2139177.html

解决方案二:

using System.ComponentModel;
?
文件开头
?
??? public partial class Form1 : Form
??? {
??????? private BackgroundWorker worker = new BackgroundWorker();
?
??????? public Form1()
??????? {
??????????? Initi......
答案就在这里:进度条实现(多线程)

时间: 2024-11-17 06:26:09

qt-QProgressBar 不动,多线程实现进度条的相关文章

Qt之QRoundProgressBar(圆形进度条)

简述 QRoundProgressBar类能够实现一个圆形进度条,继承自QWidget,并且有和QProgressBar类似的API接口. 简述 详细说明 风格 颜色 字体 共有函数 共有槽函数 详细说明 主要有以下特性: 圆形进度条控件 高度可定制的 源码下载: Qt Circular Progress Bar Widget QRoundProgressBar下载 下载完后,进行解压缩,src目录里包含了两个主要的文件QRoundProgressBar.h和QRoundProgressBar.

C# 多线程控制进度条进度

问题描述 我想要一个2个线程,一个线程控制方法执行,方法执行的时间就是另一个进程控制进度加载的速度.求实例. 解决方案 解决方案二:你这里的"线程"的概念本身就是"坑"的.你这样滥用线程概念,若遇不太关心技术的团队,以后制造出来的问题将很多.在一个计算任务中,如果要设置进度条,写一条类似这样的代码this.progressBar1.BeginInvoke((Action)delegate{this.progressBar1.Value=20;}); 就可以了.(当然

迅雷8进度条不动怎么办

  迅雷进度条不动怎么办 迅雷进度条不动解决办法 [迅雷进度条不动解决办法1] 这种情况可能是迅雷7的进度保护导致的,这个情况建议重新下载当前资源. [迅雷进度条不动解决办法2] 如多个文件或者经常出现这个情况,请卸载并在另外一个磁盘上重新安装最新版本.(建议不要覆盖安装,必须卸载安装)

Qt之模型/视图(自定义进度条)

简述 在之前的章节中分享过关于QHeaderView表头排序.添加复选框等内容,相信大家模型/视图.自定义风格有了一定的了解,下面我们来分享一个更常用的内容-自定义进度条. 实现方式: 从QAbstractTableModel中设置对应的进度数据,因为我们需要显示进度条,而不是直接显示进度文本,所以原始的数据不需要直接显示在界面上,所以不需要使用Qt::DisplayRole,可以使用Qt::UserRole来代替. 委托QStyledItemDelegate中根据进度索引所对应的数据来获取进度

关于C#多线程进度条的问题

问题描述 我做了一个文档扫描的软件,扫描的时候使用了多线程技术,并且对每个扫描都会弹出一个进度条的显示,现在的问题是我连续扫描三个不同的文件的时候,所有的进度条操作都在最后开的那个进度条里进行,小弟是第一次玩C#,不是很懂怎么调,接下来就是贴源代码,大家帮我看看.首先是进度条窗体usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;us

安装.NET Framework进度条卡住不动的解决方案(推荐)_实用技巧

VS在安装之前需要安装.NET Framework,我安装的是4.0版本.但是安装进度条到一半左右时就卡住不动了.前前后后重试多次,还有几次重新开机,但都没用. 开始还以为是安装的系统有问题.后来在网上求助,尝试几次之后终于找到了解决方案.这里记下来,方便以后使用.以下为主要的操作步骤: 1. 需要关闭系统的update服务:快捷键Win+R打开服务面板,输入"services.msc"打开服务管理,找到"Windows Update"选项, 右键点击"停

Qt flash_eraseall nandwrite 进度条显示擦除、烧录

/***************************************************************************** * Qt flash_eraseall nandwrite 进度条显示擦除.烧录 * 声明: * 当我们在 Linux shell中执行nand擦除.烧入程序时,我们可以通过终端查看 * 过程,但是有时候我们可能希望能够有个界面,这样会更直观的提供当前的程序 * 的执行状态,于是个人写了这个Demo,目前暂时使用. * * 2015-10-

Android编程开发实现带进度条和百分比的多线程下载

本文实例讲述了Android编程开发实现带进度条和百分比的多线程下载.分享给大家供大家参考,具体如下: 继上一篇<java多线程下载实例详解>之后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java: package com.example.downloads; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.net.H

Android多线程+单线程+断点续传+进度条显示下载功能

效果图 白话分析: 多线程:肯定是多个线程咯 断点:线程停止下载的位置 续传:线程从停止下载的位置上继续下载,直到完成任务为止. 核心分析: 断点: 当前线程已经下载的数据长度 续传: 向服务器请求上次线程停止下载位置的数据 con.setRequestProperty("Range", "bytes=" + start + "-" + end); 分配线程: int currentPartSize = fileSize / mThreadNum