使用方法:
进度条问题
使用问题:
在遇到大量的写入多个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())