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
コードを使用した私のテストは次のとおりです。