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也显示左对齐的文本,即使它们的列宽编号是正数。此外,它仅在字体样式为 Monospace 时才真正起作用。

我发现的另一种方法是使用 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

0

在 pyside2 上,我使用 font-familiy 等宽字体(在 qt 设计器中设置),然后
text_row1 = str(col1).ljust(10) + ...

于 2019-09-22T14:59:40.553 回答