【问题标题】:QT c++ - read one line from file into text browser - keep on one line [duplicate]QT c ++ - 从文件中读取一行到文本浏览器中 - 保持在一行[重复]
【发布时间】:2016-10-04 18:40:04
【问题描述】:

我正在尝试读取一个文件,该文件在各行中包含服务器名称。

我希望文本浏览器中的输出为一行 .*<servername>|<servername>|<servername>.*

我已经尝试直接读取文本浏览器,读取数组并从数组输出。这两种方法都会导致文本浏览器在自己的行上显示每个项目。我希望所有输出都在同一行。也许是 append 方法或 .readLine 方法导致了它?

这是我的代码:

void MainWindow::on_pushButton_clicked()
{   
    QString myfile=QFileDialog::getOpenFileName(
                this,
                tr("Open File"),
                "C://",
                "Text File (*.txt)"
                );

    QFile file(myfile);
    if(!file.open(QIODevice::ReadOnly))
        QMessageBox::information(0,"info",file.errorString());

    QTextStream in(&file);
    ui->textBrowser->append(".*");

    while (!file.atEnd())
    {
        QString line = file.readLine();
        ui->textBrowser->append(line);
        ui->textBrowser->append("|");
    }

    file.close();
}

【问题讨论】:

  • 在 GUI 线程中运行的插槽中执行文件 I/O 是一个可怕的想法。
  • 很酷,对批评那些试图学习而不提供任何替代方案的人很有帮助。
  • 你也将我的问题标记为重复,但实际上它不是。我问的是使用 textBrowser,你链接了一篇关于 QPlainTextEdit 的文章
  • @Kuba Ober 这不是重复的。请重新打开。
  • 在 GUI 线程中执行文件 I/O 的“替代方案”:只是不要在 GUI 线程中执行,我希望这很清楚。在其他线程中有很多人这样做,无论如何,这在这个特定问题中是题外话。

标签: c++ qt


【解决方案1】:

readLine 的返回包括返回缓冲区中的换行符。因此,当您将其写入包含换行符的 textBrowser 时。

有关详细信息,请参阅 qiodevice::readLine 文档。

【讨论】:

  • 那么如何在不返回换行符的情况下从文本文件中读取一行?我尝试了 file.read() 但那不起作用。
  • line.remove(QRegExp("[\n\t\r]")); // 就在你读完这一行之后
  • 我最终通过谷歌搜索从 Qfile 中的 readline 读取的数据中删除回车的方法,完全按照您的要求完成了上述操作。我希望我可以将您的回复标记为答案,因为您比 Kuba Ober 更有帮助和友善。一些人对 IT 知识和提问者的精英态度可能会令人窒息。很高兴有像你这样的人记得成为新人的感觉。感谢您的帮助
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2011-03-06
  • 2013-02-17
  • 2021-05-08
相关资源
最近更新 更多