qt一般如何读写文件

发布于 2022-09-02 20:49:20 字数 1101 浏览 20 评论 0

最近在做一个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. 这两个组件的性能差异的原因,以及能有什么使用心得?

  2. 一般的中等大小的文件读写是怎么个机制?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

木落 2022-09-09 20:49:20

卡很久跟QFile没关系,而是不要把超时、长时间运行(所谓的长时间就是耗时可能超过100ms)的放到GUI线程,采用异步才会保证界面不卡。
换言之,你把文件读取的这个逻辑注释掉,在这里使用sleep下模拟长时间的操作,你也会感觉到界面的卡顿。
解决方案:
超时的任务放在后台线程做,做完之后通过signal-slot传递给GUI线程获取

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文