Форматирование таблицы в QTextTable
В продолжение темы Формирование ODF...: столкнулся с проблемой форматирования выводимой таблицы, как непосредственно самой таблицы, так и ячеек в ней.
Qt 5.15.12
Задача: Выводятся некоторые данные в таблице с тремя столбцами:
- номер по порядку
- название параметра
- значение параметра
Код формирования:
//-- попытка задать ширину столбца таблицы
QVector<QTextLength> columnLength;
QTextTableFormat tableFormat;
columnLength.append(QTextLength(QTextLength::PercentageLength, 10));
columnLength.append(QTextLength(QTextLength::PercentageLength, 20));
columnLength.append(QTextLength(QTextLength::PercentageLength, 70));
tableFormat.setColumnWidthConstraints(columnLength);
//-- формат для блоков обычных текстовых абзацев
QTextBlockFormat text_block_fmt;
text_block_fmt.setTextIndent(37.8151); //-- в хз каких еденицах! 90 =2.38 см.
text_block_fmt.setAlignment(Qt::AlignJustify); //-- выравнивание по ширине
//-- формат для заголовков таблиц
QTextBlockFormat cellTitleBlockformat;
cellTitleBlockformat.setAlignment(Qt::AlignHCenter);
//-- формат для ячеек таблиц
QTextBlockFormat cellInfoBlockformat;
cellInfoBlockformat.setAlignment(Qt::AlignJustify);
cellInfoBlockformat.setTextIndent(18.5);
cellInfoBlockformat.setLeftMargin(4);
cellInfoBlockformat.setTopMargin(2);
cellInfoBlockformat.setBottomMargin(2);
cellInfoBlockformat.setRightMargin(6);
for (int i = 0; i < data.count(); i++) {
int table_num = i + 1;
//-- указываем
progress->setLabelText(QString("Формируемый элемент: %1").arg(table_num));
qApp->processEvents();
QString corrected_name = data[i]->name.trimmed();
QString title =
QString("Таблица %1 - ..... %2\n")
.arg(QString::number(table_num), corrected_name);
cursor.setBlockFormat(text_block_fmt);
cursor.setBlockCharFormat(fmt_title);
cursor.insertText(title, fmt_title);
//-- 3 столбца с 20 строками (первая строка - заголовок таблицы)
//-- указатель на формируемую таблицу
QTextTable *tbl = cursor.insertTable(20, 3, tableFormat);
cnt = 0;
//-- формируем заголовки таблицы
//------------------------------------------------------------------------------------------------
QTextCursor tblCursor = tbl->cellAt(cnt, 0).firstCursorPosition();
tblCursor.setBlockFormat(cellTitleBlockformat);
tblCursor.insertText("№ п/п", fmt_table_caption);
tblCursor = tbl->cellAt(cnt, 1).firstCursorPosition();
tblCursor.setBlockFormat(cellTitleBlockformat);
tbl->cellAt(cnt, 1).firstCursorPosition().insertText("Наименование поля ",
fmt_table_caption);
tblCursor = tbl->cellAt(cnt, 2).firstCursorPosition();
tblCursor.setBlockFormat(cellTitleBlockformat);
tbl->cellAt(cnt++, 2).firstCursorPosition().insertText("Значение поля", fmt_table_caption);
//-- теперь заполняем данные
//------------------------------------------------------------------------------------------------
tblCursor = tbl->cellAt(cnt, 0).firstCursorPosition();
tblCursor.setBlockFormat(cellTitleBlockformat);
tbl->cellAt(cnt, 0).firstCursorPosition().insertText(QString::number(cnt), fmt_table_text);
tblCursor = tbl->cellAt(cnt, 1).firstCursorPosition();
tblCursor.setBlockFormat(cellInfoBlockformat);
tbl->cellAt(cnt, 1).firstCursorPosition().insertText("Параметр", fmt_table_text);
tblCursor = tbl->cellAt(cnt, 2).firstCursorPosition();
tblCursor.setBlockFormat(cellInfoBlockformat);
tbl->cellAt(cnt++, 2).firstCursorPosition().insertText(
data[i]->vul_name.isEmpty() ? strNoInfo : data[i]->name, fmt_table_text);
... заполнение строк таблицы и в конце попытка снова задания формата
tableFormat = tbl->format();
tableFormat.setColumnWidthConstraints(columnLength);
tbl->setFormat(tableFormat);
Проблема 1: Ни первая попытка задания формата таблицы при вставке ни вторая по окончании создания таблицы никакого эффекта не дают.
Проблема 2: Не могу вставить текст в ячейку таблицы, если он содержит символы переноса строки "\n". Строки после первой просто пропадают. Временно решил проблему вставкой не текста а HTML, примерно так:
auto link = data[i]->link;
link = link.replace("\n", "<br>");
link = link.replace("\r", "");
link = link.replace(QRegularExpression("(<br>){2,}"), "<br>");
link = QString("<span style=\" font-size:12pt; font-family:Times New Roman;\">%1</span>").arg(link);
tbl->cellAt(cnt++, 2).firstCursorPosition().insertHtml(
data[i]->link.isEmpty() ? "-" : link);
Но это очень... коряво.
Кто может подсказать, направить и ткнуть носом в ошибку?