问题描述
最近在做一个qt文本处理工具这里主要用到两个显示组件 QTextEdit和QPlainTextEdit我要打开一个纯文本文件,将字符串显示到textEdit上
//初始化QPlainTextView *plainTextEdit = new QPlainTextView(this);void MainWindow::openFile(){// QMessageBox::information(this,tr('Information'),tr('Open')); QString filename = QFileDialog::getOpenFileName(this,tr('Open File'),'../..',tr('Text files (*.txt)')); if(!filename.isEmpty()){QFile file(filename);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning(this, tr('Read File'), tr('Cannot open file:n%1').arg(filename)); return;}QTextStream in(&file);in.setCodec('utf-8');QString qs = in.readAll();plainTextEdit->setPlainText(qs);
我这里是一次性从QTextStream中把字符串都读到QString中了,然后用setPlainText方法把QString都绘制到QPlainTextEdit组件上。实测一个6M的纯文本,速度还是很快的。
但是当我用QTextEdit组件,却卡了好久。
求问:
这两个组件的性能差异的原因,以及能有什么使用心得?
一般的中等大小的文件读写是怎么个机制?
问题解答
回答1:卡很久跟QFile没关系,而是不要把超时、长时间运行(所谓的长时间就是耗时可能超过100ms)的放到GUI线程,采用异步才会保证界面不卡。换言之,你把文件读取的这个逻辑注释掉,在这里使用sleep下模拟长时间的操作,你也会感觉到界面的卡顿。解决方案:超时的任务放在后台线程做,做完之后通过signal-slot传递给GUI线程获取