QT进度条、表格清空、QString 和string类型转换 遇到的问题记录

14 篇文章 0 订阅

使用方法:

进度条问题
使用问题:
在遇到大量的写入多个IO操作文件的时候进度条会出现卡死及导致界面卡死退出的一个状态。
初步怀疑:写入的数据条数太多,导致主线程运行界面卡死:
解决思路,把写IO放入分支线程中去,待验证该问题。

解决:进度条不会导致界面卡死,界面卡死的原因是因为所有东西都在主线程中,阻塞了界面,把处理数据要单独开一个线程,这样,就不会导致界面卡住的现象。

进度条调用代码:

ui->progressBar->setValue(0); //设置当前进度条值
ui->progressBar->setMaximum(m_total);//设置进度条最大值
ui->progressBar->reset();//进度条复位

表格清空问题:
直接使用clear()调用不会完全清楚表格中的内容,因为tableWidget会自动维护它的索引值,所以如果按照下述代码的写法会导致代码不会完全删除所有行,还会有残余

	for (int i = 0; i < ui->tableInfo->rowCount(); i++)
	{
		ui->tableInfo->removeRow(i); //删除当前行及其items
	}
    m_totalTime = 0;
    m_index     = 0;
    ui->tableInfo->clearContents();

正确全部清楚表格中的内容做法:

	int count = ui->tableInfo->rowCount();
	for (int i = 0; i < count; i++)
	{
		ui->tableInfo->removeRow(0); //删除当前行及其items
	}
    m_totalTime = 0;
    m_index     = 0;
    ui->tableInfo->clearContents();

说明:只是简单的将所有行先计算出来,然后固定循环一定次数删除第一行即可全部清除所有数据。

如何解决QString 和 String 转换过程中涉及的中文乱码问题:

下述方法在QT中无法正确显示其中 的中文,但是能在VS+QT中正确的显示中文内容。如果只用QT Create下该如何转换呢?

QString::fromLocal8Bit(stringstr.c_str());

使用QString的 toLocal8Bit() 方法

QString savepath = “ ”;
QByteArray ba = savepath.toLocal8Bit();
char *saveimagepath = ba.data();
bool rv = cv::imwrite(saveimagepath,roi);

有下述写法
std::string imgpathname = std::string((const char *)savepath.toLocal8Bit().constData())  ;
直接这样也行
std::string imgpathname =savepath.toLocal8Bit();
这两种其实我人为都是一种方法,只是写法不一样而已。
这时候使用cout输出imgpathname就会正确显示正文字符

QString 和 String互相转换:

std::string stringstr = str.toStdString();
QString str = QString::fromLocal8Bit(stringstr.c_str())
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值