最近在做一个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组件,却卡了好久。
求问:
这两个组件的性能差异的原因,以及能有什么使用心得?
一般的中等大小的文件读写是怎么个机制?
PHPz2017-04-17 13:49:39
卡片很久跟QFile沒關係,而是不要把超時、長時間運行(所謂的長時間就是耗時可能超過100ms)的放到GUI線程,採用異步才會保證界面不卡。
換言之,你把檔案讀取的這個邏輯註解掉,在這裡使用sleep下模擬長時間的操作,你也會感覺到介面的卡頓。
解決方案:
超時的任務放在後台執行緒做,做完之後再透過signal-slot傳遞給GUI執行緒取得