3

私は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ドキュメントQStringList Doucmentation、およびほとんどすべてのQTextStreamドキュメントを参照した後、このメンバー関数を見つけることができないようです

現在、私の保存機能は次のようになっています。

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ドキュメントからの私の答えであると確信しています。しかし、私はそれを正しく機能させることができません。試した:

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

私はこれが誰かにとって簡単な答えであることを望んでおり、私はちょうどいくつかのライターズブロックに遭遇していますが、これを達成するためにどんな助けも必要です。私の投稿を読んでくれてありがとう、そしてここのギャップを埋めるために貢献してくれた助けに感謝します!

4

1 に答える 1

2

std::fstreamSTLを使用する場合の1つのオプションです。ただし、文字列リスト全体をフィールドとして扱っている場合、試してみることができる出力例では、幅が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";
}
于 2012-04-02T20:45:40.413 に答える