【问题标题】:SOLVED - Qt does not display a specific line from a txt file已解决 - Qt 不显示 txt 文件中的特定行
【发布时间】:2023-01-31 00:45:12
【问题描述】:

大家好,这里是我关心的问题,它涉及带有 Qt 的 C++:

我的项目的一部分是从包含名称的 txt 文件中显示随机行,我制作了第一个程序来执行此操作并且它运行完美,就在这里(这里定义了随机数)。

std::ifstream file("noms.txt");
std::string line;
std::string response_string = "452";
int randomLine = std::stoi(response_string);
for (int i = 0; i <= randomLine; i++) {
  std::getline(file, line);}

std::cout << line;

但是当我的程序完成时执行此代码时(这里是相关部分)

std::ifstream file("noms.txt");
std::string line;
int randomLine = std::stoi(response_string);
for (int i = 0; i <= randomLine; i++) {
     std::getline(file, line);}

QString qstringLine = QString::fromStdString(line);
nom->setText(qstringLine);

在这里,当我在标签“name”中放入一些值时,它会显示出来,但是当我放入 txt 行时,它不起作用(这里,response_string 变量是一个来自 api 的字符(但是一个数字) )

你有什么想法吗?

我已经尝试过不将该行转换为 QString,我已经尝试只显示 api 的结果(有效),我认为问题出在读取该行和显示之间。我还尝试更新小部件。

【问题讨论】:

  • 没有足够的数据。它可能是多字节字符串吗? Qt 不处理转换,除非您在这种情况下设置编解码器。
  • i &lt;= randomLine <= 会导致它多读 1 行。因此,如果 randomLine 是 2,则期望它打印文件的第 3 行。

标签: c++ api qt file


【解决方案1】:

QTextStream类和QTextStream::readLine()函数可以做得更好。 例子:

QFile data("noms.txt");
const auto line_num{200};
QString line;
if (data.open(QIODevice::ReadOnly | QIODevice::Text)) {
    QTextStream stream(&data); 
    for (auto i{0}; i < line_num && stream.readLineInto(&line); ++i) {}
}

qDebug() << "line num 200:" << line;

【讨论】:

  • 也没有显示任何内容,甚至按照您向我指示的方式进行修改。
  • 如果 line_num 大于实际文件的行号,您将看到空字符串
  • 我的文件是 700 行
  • @Vilerio 正确的行结尾?您甚至尝试调试吗?
  • 已解决,谢谢!
【解决方案2】:

我关闭这篇文章,感谢您的帮助,但我发现了(路径和访问权限的问题)。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加更多详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写出好的答案的信息in the help center
  • 所以问题是缺少错误处理!您没有检查文件是否已成功打开(也没有检查报告的错误)。
猜你喜欢
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2013-07-11
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多