我想使用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
代码的测试:
答案 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