Я хочу создать окно журнала в Qt (4.8) с помощью QPlainTextEdit. Это означает, что я буду использовать 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);
or
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
:
QTextStream
подходом! Этого достаточно для моего варианта использования. - person Vicky Chijwani   schedule 27.06.2016