[Qt]QProgressDlg的使用

程序中遇到了一个比较耗时的操作,本来想着扔到线程处理,但是不太合适,所以想用一个进度条显示当前执行的进度。

因为耗时无法确定,在网上找资料,有说用一个QTimer控制进度条进度,等耗时结束,直接把进度条设置成100就行了。

下面先上代码:

1 创建进度条

	m_pProgressDlg = new QProgressDialog(this);
	m_pProgressDlg->setWindowTitle("Please wait");
	m_pProgressDlg->setCancelButton(0); //去掉cancel按钮
	m_pProgressDlg->setFixedWidth(300);
	m_pProgressDlg->setRange(0, 100);
	m_pProgressDlg->setModal(true); //设置成模态

	m_pProgressDlg->setStyleSheet("QProgressBar {color: white;}");   //设置进度百分比字体颜色

	//去掉右上角问号
	Qt::WindowFlags flags=Qt::Dialog;
	flags |=Qt::WindowCloseButtonHint;
	m_pProgressDlg->setWindowFlags(flags);
	m_pProgressDlg->show();
	m_pProgressDlg->setValue(0);

	QCoreApplication::processEvents();//避免界面冻结

	if (m_pTimer)
	{
		m_pTimer->stop();//停止定时器
		m_pTimer->deleteLater();
		m_pTimer = nullptr;
	}
	m_pTimer = new QTimer(this);	
	m_pTimer->start(2000);//开启一个没有终点的定时器
	connect(m_pTimer, SIGNAL(timeout()), this, SLOT(updateProgressBarVal()));
2 更新进度条
void updateProgressBarVal()
{
	m_nCurBarVal++;  
	if( m_nCurBarVal == 100 )  
		m_nCurBarVal = 0;  
	if (m_pProgressDlg)
	{
		m_pProgressDlg ->setValue(m_nCurBarVal);
	}
	QCoreApplication::processEvents();//避免界面冻结
}
3 执行耗时操作

//你的耗时操作

....


需要注意的是!!!
代码的顺序是,先创建进度条,然后执行耗时操作,但是耗时操作要另起一个线程执行,如果在同一个线程执行,界面会卡住,接收不到进度条更新的消息(为什么,我还没弄清楚~~~),如果有大神知道,请留言告诉我,先谢谢了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值