Как эффективно создать регистратор столбцов фиксированной ширины, используя QPlaintTextEdit?
Я хочу создать окно журнала в Qt (4.8), используя QPlainTextEdit. Это значит я буду использовать 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
отображать выровненный по левому краю текст, даже если их ширина по столбцу положительна. Кроме того, он работает только в том случае, если стиль шрифта - 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
код:
0 ответов
На pyside2 я использую моноширинный шрифт font-familiy (установлен в qt Designer), а затем
text_row1 = str(col1).ljust(10) + ...