我是一名使用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 documentation,QStringList 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";
我希望这对某人来说是一个简单的答案,而我只是遇到了一些作家,但任何帮助都会在实现这一目标时得到满足。感谢阅读我的帖子,我感谢任何帮助弥补差距的帮助!
答案 0 :(得分:2)
std::fstream
是一个选项。但是,如果您将整个字符串列表视为一个字段,那么您可以尝试使用setFieldWidth(23)
示例输出,其宽度远远超过13,但它可能会填充结尾。如果您将每个值视为一个字段,那么它就会变得更容易。
将每个值视为字段的含义示例:
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";
}