Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Qt读取文件并快速显示?_Qt_File - Fatal编程技术网

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

如何使用Qt读取文件并快速显示?,qt,file,Qt,File,我必须使用Qt显示一个文件的上下文,该文件的大小为70M,但速度太慢,需要几分钟才能显示出来 QFile file("farey.txt"); file.open(QFile::ReadOnly | QFile::Text); QTextStream ReadFile(&file); while (!ReadFile.atEnd()) { QString line = ReadFile.readLine(); u

我必须使用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();
输出
文本编辑
,有人能帮我加快速度吗


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

您的问题可能是逐行追加文件的内容。这会迫使文档在每一行上重复布局,这就是速度减慢的原因。一次性读取整个文件,并使用
setPlainText

在编辑器上进行设置首先,这就足够了:

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

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

如果您想以纯文本显示文件,小部件
QPlainTextEdit
QTextEdit
更好。它经过优化以处理大型文档,例如,请参见

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

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

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

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


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

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

有什么方法可以流式处理它吗?您是否尝试过
QPlainTextEdit
?我使用QPlainTextEdit并使用14s显示它。非常感谢,可以使用
QDesktopServices
将文件分发到默认系统处理程序。我用这个例子更新了我的答案。我也不能在1分钟内显示出来。还有其他选择吗?我可以使用任何其他对象,唯一的要求是快速显示它。例如,我可以调度一个系统默认编辑器来显示文件吗?可以。我唯一的困难是显示70M大小的文件。我用这个,但不能在1分钟内显示出来。我是否可以使用系统默认编辑器来打开文件,而不是在
文本编辑中显示它?
?田彤我认为@RazrFalcon暗示了一次只读取部分文件的可能性。大概你不会一次在屏幕上显示所有70兆字节。所以-你可能只读取实际显示的100K。在大内存芯片出现之前,文字处理器/文本编辑器通常都是这样做的。如果没有太多延迟,我可以读一部分又一部分。但我该怎么办呢?当我使用循环逐行读取时,它会在一个巨大的延迟后显示所有内容,而不是逐行显示line@tian_tong您必须尝试不同的文件读取方法。从文件读取时不必有延迟。可能是您用来读取的方法,例如,第1000行读取所有999行。大约20年前,我在DOS实用程序中这样做了。很遗憾,我把密码弄丢了。非常感谢。这就是我要找的。现在我甚至可以使用emacs快速打开300M文件