3

QPlainTextEdit を使用して Qt (4.8) でログ ウィンドウを作成したいと考えています。これは、 を使用することを意味しますappendPlainText。そのログは、表示されるデータとは無関係に固定幅を持つ必要があるデータの列を表示する必要があります (データの最大サイズになります)。IOW 私は彼らがこのようなものを表示できるようにしたい:

column 1    column 2    column3
data1       data2       data3
   data1      data2     data3
a           b           c

上記の例でわかるように、各列には固定幅があります。たとえば、一部のデータが使用可能なスペースよりも小さい場合、次のデータはそれぞれの列の正確な開始点から始まります (直後ではなく)。これを Qt で効率的な方法で行う方法を知る必要があります。

ウェブでいくつかの調査を行った後、私が取ったいくつかの方法が不適切であることがわかりました. 最初は QString::args() を使用しています:

ui->plainTextEdit->appendPlainText(QString("%1 %2 %3").arg("123456789",15,' ').arg("123456789",15,' ').arg("123456789",15,' '));
ui->plainTextEdit->appendPlainText(QString("%1 %2 %3").arg("12345",15,' ').arg("123456789",15,' ').arg("123456789",15,' '));
ui->plainTextEdit->appendPlainText(QString("%1 %2 %3").arg("333333333333",-15,' ').arg("12345",-15,' ').arg("12345",-15,' '));
ui->plainTextEdit->appendPlainText(QString("%1 %2 %3").arg("333333333333333",15,' ').arg("333333333333333",15,' ').arg("123456789",15,' '));

上記のコードにはいくつかの欠陥があります。まず、列のサイズを示す場所に「-」が設定されていない限り、デフォルトの表示構成は集中化されたデータです。(文書では、正の数は右揃えの値を与えると正式に述べられていますが、私のテストではそうではありませんでした。以下を参照してください) ただし、これにはバグがあり、制限があります。右揃えにすることができませんでした。最初argに左揃えのテキストを表示し、その後に続く他のすべてのargs列幅の数値が正であっても、同様に左揃えのテキストを表示します。さらに、実際にはフォント スタイルがモノスペースの場合にのみ機能します。

私が発見した別の方法は、QTextStream を使用することです。

QString s;
QTextStream ss(&s);
ss.setFieldAlignment(QTextStream::AlignLeft);
ss.setFieldWidth(40);

また

QString s;
QTextStream ss(&s);
ss << left << qSetFieldWidth(40) << "Value" << "Keyword/Constant" << qSetFieldWidth(0) << endl;
ss << qSetFieldWidth(40) << "One" << "One" << qSetFieldWidth(0) << endl;

しかし、これは「複雑すぎる」ようです。のような解決策を期待していましたargs

別の方法はありませんか?

argsコードを使用した私のテストは次のとおりです。

最初のコードのテスト結果

参照:リンク 1リンク 2

4

1 に答える 1