【问题标题】:Using iomanip to format data output to a text file with Qt使用 iomanip 将数据输出格式化为带有 Qt 的文本文件
【发布时间】:2012-04-02 20:27:22
【问题描述】:

我是一名学生程序员,使用 QT 开发和申请工作。目前我正在开发保存功能,其中数据从表中获取并保存到文件中。当我尝试将数据写入列时遇到了一些麻烦。不要混淆任何人;我的问题是从数据表中保存时格式化文本;不读它。因此,目前当从我的表中保存数据时,它会保存到一个文件中,如下所示:

0 0.048 300 101325 0 0
10 0.048 300 101325 0 0

我需要它看起来像这样

0  0.048 300 101325 0 0
10 0.048 300 101325 0 0

在研究过程中,我遇到了来自 c++ 中 iomanip 库的 setw,它设置了填充数据的最少字符数,然后将其余字符用作填充。听起来很完美吧?问题是我不能让它与除了 cout 之外的任何东西一起工作;这不是我需要的。在写出之前,我需要它基本上将空格附加到我的字符串。

我也觉得 Qt 可能应该有一些东西来帮助我完成我在这里需要的东西(更容易)。在引用QString documentationQStringList Doucmentation 和最重要的QTextStream Documentation. 之后,我似乎找不到这个成员函数

目前我的保存功能如下:

QTextStream data(&saveFileAsscf);
QStringList tmpList;
for (int x = 0; x<ui->tableWidgetReaderTable->rowCount(); x++)
                {
                    strList.clear();
                    for(int a = 0; a < ui->tableWidgetReaderTable->columnCount(); a++)
                    {
                        strList << ui->tableWidgetReaderTable->item(x,a)->text();
                    }
                    data <<strList.join(" ") << "\n";
                }

我很确定 setFieldWidth 是我从QTextStream Documentation. 得到的答案,但我无法让它正常工作。 试过了:

data.setFieldWidth(13) << strList.join(" ") << "\n";

我希望这对某人来说是一个简单的答案,我只是遇到了一些作家的障碍,但在完成这个过程中会得到任何帮助。感谢您阅读我的帖子,感谢任何有助于弥合此处差距的帮助!

【问题讨论】:

  • 确实;假设我可以将我的文本流大多数到内部 for 循环以实现所需的效果(也就是说,一旦 setFieldWidth 正常工作)。
  • strList的类型是什么?
  • leftJustified()rightJustified() 等 QString 方法的组合也可能对您有所帮助
  • @Rob strList 是一个 QStringList 类型
  • @unexplored 确实;我已经使用了我最近的尝试。一个看起来很有希望的。如果可行,我将在允许时重新发布答案

标签: c++ qt qfile iomanip


【解决方案1】:

std::fstream 是一种选择,如果您想使用 STL。但是,如果您将整个字符串列表视为一个字段,则示例输出的宽度远大于 13,因为您可以尝试 setFieldWidth(23) 但它可能会填充结尾。如果您改为将每个值视为一个字段,那么它会变得更容易。

将每个值视为字段的含义示例:

QTextStream data(&saveFileAsscf);
for (int x = 0; x<ui->tableWidgetReaderTable->rowCount(); x++)
{
   data.setPadChar(' ');
   for(int a = 0; a < ui->tableWidgetReaderTable->columnCount(); a++)
   {
      QString value = ui->tableWidgetReaderTable->item(x,a)->text();
      data.setFieldWidth(qMax(2, value.length()));
      data << value;
      data.setFieldWidth(1);
      data << " ";
   }
   data << "\n";
}

【讨论】:

  • 您应该举例说明如何 设置宽度。我建议data &lt;&lt; setw(?) &lt;&lt; ui-&gt;tableWidg...
  • 根据乍得的评论更新了一种方法。并不是说这是最好的方法,只是想到的第一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多