|
1Qter豆
本帖最后由 amc 于 2017-9-18 14:53 编辑
写了一个工具,连接好串口助手后,短接串口收发,打开二进制文件(打开一张200k jpg图片速度很慢),以16进制显示。发送到串口,16进制显示,越往后速度越慢。
下面是代码,传百度云了,请大神们看看,为啥打开慢,接收显示越来越卡
百度网盘下载地址
测试文件下载地址
代码都是东拼西凑的,网上找的,有点乱,大家多多包涵
开发环境:qt5.9 win10
我测试打开文件的时候,卡在了ui->textEdit->insertPlainText (*tempStr);这里,有没有什么好的方法可以加快显示速度? 接收的时候,应该是ui->textBrowser->setText(ui->textBrowser->document()->toPlainText() + buf);这里的问题,改成
ui->textBrowser->setText(buf);就不会卡了,请问这里有什么办法优化没?
代码:
- //读串口接收数据
- void MainWindow::readData()
- {
- // QByteArray data = serial->readAll();
- // console->putData(data);
- QByteArray temp = serial->readAll();
- QString buf;
- // if(!temp.isEmpty())
- // {
- // buf = temp;
- // ui->textBrowser->setText(ui->textBrowser->document()->toPlainText() + buf);
- // ui->textBrowser->moveCursor(QTextCursor::End);
- // }
- if(!temp.isEmpty()){
- // if(chrReceive->isChecked()){
- // buf = temp;
- // }else if(hexReceive->isChecked()){
- for(int i = 0; i < temp.count(); i++){
- QString s;
- s.sprintf("%02X ", (unsigned char)temp.at(i));
- buf += s;
- }
- // }
- ui->textBrowser->setText(ui->textBrowser->document()->toPlainText() + buf);
- ui->textBrowser->moveCursor(QTextCursor::End);
- // //ui->statusBar->showMessage(tr("成功读取%1字节数据").arg(temp.size()));
- }
- }
复制代码
- //打开文件,并发送
- void MainWindow::on_openFileButton_clicked()
- {
- //get file name
- QString 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);
- in.readRawData (binByte, binSize); //读出文件到缓存
- QByteArray *tempByte = new QByteArray(binByte, binSize); //格式转换
- delete[] binByte;
- QString *tempStr = new QString(tempByte->toHex ().toUpper ());
- // delete tempByte;
- //显示文件内容
- 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->textEdit->insertPlainText (*tempStr);
- serial->write(*tempByte);
- delete tempByte;
- delete tempStr;
- file->close ();
- delete file;
- }
复制代码
|
|