如何使用QPlaintTextEdit有效地创建固定宽度的列记录器?

时间:2015-06-12 17:06:51

标签: qt logging qstring qplaintextedit

我想使用QPlainTextEdit在Qt(4.8)中创建一个日志窗口。这意味着我将使用appendPlainText。该日志需要显示数据列,这些数据列需要具有与所示数据无关的固定宽度(它们将具有最大数据大小)。我希望他们能够展示这样的东西:

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;

但这似乎过于复杂了#34 ;;我期待的解决方案更像args

还有另一种方式吗?

以下是args代码的测试:

Test result for the first code

参考文献:Link 1Link 2

1 个答案:

答案 0 :(得分:0)

在pyside2上,我使用font-familiy等宽字体(在qt设计器中设置),然后
 613,710,200,127,127,'{\""js\"":{\""\"":\""16\"",\""43451\"":\""16\"",\""65815\"":\""16\"",\""43452\"":\""16\"",\""41147\"":\""16\"",\""43449\"":\""16\"",\""43467\"":\""16\"",\""1249\"":\""16\"",\""43462\"":\""16\"",\""43468\"":\""48\"",\""43438\"":\""64\"",\""43439\"":\""80\""}}','rca',95,2048000,3,1,'AABBCCDDEEFFGGHHIIJJKKLL=','xx.xx.xx.xx',NULL 614,710,200,127,127,'{\""js\"":{\""\"":\""16\"",\""43451\"":\""16\"",\""65815\"":\""16\"",\""43452\"":\""16\"",\""41147\"":\""16\"",\""43449\"":\""16\"",\""43467\"":\""16\"",\""1249\"":\""16\"",\""43462\"":\""16\"",\""43468\"":\""48\"",\""43438\"":\""64\"",\""43439\"":\""80\""}}','din',95,2048000,3,1,'AABBCCDDEEFFGGHHIIJJKKLL=','yy.yy.yy.yy',NULL 615,710,200,127,127,'{\""js\"":{\""\"":\""16\"",\""43451\"":\""16\"",\""65815\"":\""16\"",\""43452\"":\""16\"",\""41147\"":\""16\"",\""43449\"":\""16\"",\""43467\"":\""16\"",\""1249\"":\""16\"",\""43462\"":\""16\"",\""43468\"":\""48\"",\""43438\"":\""64\"",\""43439\"":\""80\""}}','jst',95,2048000,3,1,'AABBCCDDEEFFGGHHIIJJKKLL=','zz.zz.zz.zz',NULL