【问题标题】:How to use Qt to read a file and display it quickly?如何使用Qt读取文件并快速显示?
【发布时间】:2015-09-28 14:34:53
【问题描述】:

我必须使用Qt显示一个文件的上下文,文件大小为70M,但速度太慢,需要几分钟才能显示。

QFile file("farey.txt");
    file.open(QFile::ReadOnly | QFile::Text);
    QTextStream ReadFile(&file);
    while (!ReadFile.atEnd()) {
        QString line = ReadFile.readLine();
        ui->Output->append(line);
    }
    file.close();

OutputTextEdit,谁能帮我加快速度?

我可以使用 Qt 调度一个默认的系统编辑器来打开文件吗??

【问题讨论】:

  • 有什么方法可以流式传输吗?
  • 你试过QPlainTextEdit吗?
  • 我使用 QPlainTextEdit 并使用 14s 显示它。非常感谢
  • 可以使用QDesktopServices 将文件发送到默认系统处理程序。我用这个例子更新了我的答案。

标签: qt file


【解决方案1】:

如果您想将文件显示为纯文本,小部件QPlainTextEditQTextEdit 更好。它针对处理大型文档进行了优化,例如参见QTextEdit vs QPlainTextEdit

QTextEdit 是支持富文本的高级所见即所得查看器/编辑器 使用 HTML 样式的标签进行格式化。

QTextEdit可以显示图片、列表和表格。

QPlainTextEdit 是支持纯文本的高级查看器/编辑器。

QPlainText 使用的技术和概念与 QTextEdit,但针对纯文本处理进行了优化


默认系统文件处理程序可以使用QDesktopServices打开文件,例如:

QDesktopServices::openUrl(QUrl::fromLocalFile("file_path"));

【讨论】:

  • 非常感谢。这就是我要找的。现在我什至可以用emacs快速打开300M文件了
【解决方案2】:

首先,这就够了:

QFile file("farey.txt");
file.open(QFile::ReadOnly | QFile::Text);
ui->Output->setPlaintText(file.readAll());

第二个 - 在您的情况下最好的优化是逻辑优化。您真的需要显示所有这 70M 的文件吗?

【讨论】:

  • 是的。我唯一的困难是显示大小为 70M 的文件。我使用它,但无法在 1 分钟内显示它。我可以使用系统默认编辑器打开文件而不是在TextEdit 中显示吗?
  • ?tian tong 我认为@RazrFalcon 暗示了一次只读取部分文件的可能性。大概您不会一次在屏幕上显示全部 70 MB。那么 - 你可能只读取实际显示的 100K 吗?在大内存芯片出现之前,这是文字处理器/文本编辑器曾经做的事情。
  • 如果没有太多延迟,我可以阅读部分和部分。但我该怎么办?当我使用循环逐行读取时,它会在巨大的延迟后全部显示,而不是逐行显示
  • @tian_tong 您将不得不尝试不同的文件读取方法。从文件中读取不必有延迟。也许你用来阅读的方法,例如第 1000 行预先读取了所有 999 行。大约 20 年前,我在一个 DOS 实用程序中做到了这一点。可悲的是,我丢失了代码。
【解决方案3】:

您的问题可能是逐行附加文件的内容。这迫使文档在每一行上重复布局——这就是速度放缓的原因。一口气读取整个文件,并在编辑器上使用setPlainText 进行设置。

【讨论】:

  • 我也不能在1分钟内显示出来。还有其他选择吗?我可以使用任何其他对象,唯一的要求是快速显示它。例如,我可以调度系统默认编辑器来显示文件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-29
  • 2013-03-21
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多