如何使用Qt快速读取文件并显示?

4

我需要使用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();

输出TextEdit,有人能帮忙使它更快吗?

我能否使用Qt来调度默认的系统编辑器来打开文件?


有没有任何方法可以进行流媒体传输? - jmasterx
https://forum.qt.io/topic/4519/how-do-i-open-large-file-on-qtextedit/2 - jmasterx
1
你尝试过使用 QPlainTextEdit 吗? - owacoder
我使用 QPlainTextEdit 并在 14 秒内显示它。非常感谢。 - tian tong
可以使用QDesktopServices将文件分派给默认的系统处理程序。我已经在我的答案中更新了示例。 - Orest Hera
3个回答

3
如果您想将文件显示为纯文本,那么小部件QPlainTextEditQTextEdit更好。它被优化以处理大型文档,例如请参阅QTextEdit与QPlainTextEdit的区别

QTextEdit是高级的所见即所得(WYSIWYG)查看器/编辑器,支持使用HTML样式标签进行文本格式设置。

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

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

QPlainTextEdit使用与QTextEdit非常相似的技术和概念,但被优化用于纯文本处理


使用QDesktopServices可以通过默认的系统文件处理程序打开文件,例如:
QDesktopServices::openUrl(QUrl::fromLocalFile("file_path"));

非常感谢。这正是我在寻找的。现在,我甚至可以使用emacs快速打开300M的文件。 - tian tong

3
首先,这就足够了:
QFile file("farey.txt");
file.open(QFile::ReadOnly | QFile::Text);
ui->Output->setPlaintText(file.readAll());

第二个优化建议是逻辑优化。您真的需要展示这70M的文件中的所有内容吗?

是的。我唯一的困难是展示大小为70M的文件。虽然我使用了这个,但无法在1分钟内展示它。我可以使用系统默认编辑器打开文件,而不是在“TextEdit”中展示吗? - tian tong
天童,我认为@RazrFalcon是在暗示一次只读取文件的一部分的可能性。假设您不会一次在屏幕上显示全部70兆字节。因此,您是否可以仅读取实际显示的100K。在大容量存储器芯片可用之前,这就是文字处理器/文本编辑器所做的。 - Michael Vincent
如果没有太多延迟,我可以分段阅读。但是我该怎么做呢?当我使用循环逐行读取时,它会在巨大的延迟后显示所有内容,而不是逐行显示。 - tian tong
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Michael Vincent

1
你的问题可能是逐行添加文件内容。这会导致文档在每一行上反复布局 - 这是减速的原因。一次性读取整个文件,并使用setPlainText将其设置到编辑器上。

我也不能在1分钟内展示它。还有其他选择吗?我可以使用任何其他对象,唯一的要求是快速显示它。例如,我可以调度系统默认编辑器来显示文件吗? - tian tong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接