qt读取.bin文件,显示在textEdit上,显示速度特别慢
最近需要写一个小工具,读.bin文件(文件大小200k),16进制显示,然后分包发送出去。程序在执行ui->textEdit->insertPlainText (*tempStr);会等一会才显示。点击我下载源码 下面是打开文件并显示槽函数:复制代码void MainWindow::on_openFileButton_clicked(){ //get file name fileName = QFileDialog::getOpenFileName(this,"Open File",QDir::currentPath());// qDebug()<< "fileName is" << fileName; ui->filePathLineEdit->setText (fileName); if(fileName.isEmpty()) { QMessageBox::information(this,"Error Message", "Please Select a Text File"); return; } QFileInfo *pcsfileInfo = new QFileInfo(fileName); binSize = pcsfileInfo->size (); QFile* file = new QFile; file->setFileName(fileName); bool ok = file->open(QIODevice::ReadOnly); if(ok) {// QTextStream in(file);// ui->textEdit->setText(in.readAll());//read all context from the file } else { QMessageBox::information(this,"Error Message", "File Open Error" + file->errorString()); return; } QDataStream in(file); char * binByte = new char[binSize]; in.setVersion (QDataStream::Qt_5_9); ui->statusBar->showMessage(tr("准备读取数据")); in.readRawData (binByte, binSize); //读出文件到缓存 ui->statusBar->showMessage(tr("读取数据完毕")); tempByte = new QByteArray(binByte, binSize); //格式转换 delete[] binByte; QString *tempStr = new QString(tempByte->toHex ().toUpper ());// ui->textEdit->append(*tempStr);// int i;// for(i = 0; i < tempStr->size (); i++)// {// if(i%64 == 0)// {// QString str1 = tempStr->mid(i,i+64);// qDebug("i:%d i+64:%d",i,i+64);// ui->textEdit->append(str1);// }// } //显示文件内容 qint8 cnt = 1; qint16 kcnt = 0; for(qint64 i = 2; i < tempStr->size ();) { tempStr->insert (i, ' ');//每个字节之间空一格 i += 3; cnt++; if(cnt == 8)//每8个字节空2格 { tempStr->insert (i, ' '); i += 1; } if(cnt == 16)//每16个字节空一格 { cnt = 1; kcnt ++; if(kcnt == 64)//每64行,即1K数据,空一行 { kcnt = 0; tempStr->insert (i, '\n'); i++; } tempStr->insert (i, '\n'); i += 3; //避免换行后开头一个空格,换行相当于从新插入 } } ui->statusBar->showMessage(tr("准备显示")); ui->textEdit->insertPlainText (*tempStr);//这句话执行非常慢 ui->statusBar->showMessage(tr("显示完毕")); timer->start(10); delete tempStr; file->close (); delete file;