Как изменить высоту строки в QTextTable
Я пишу сложный текстовый редактор, полученный из класса QTextEdit
. Он должен иметь возможность вставлять, изменять размер и применять различные форматирования во встроенные таблицы.
Я нашел функцию для ширины столбцов установки (setColumnWidthConstraints).
Но некому change _rows_ heights
.
Есть ли способ достичь этого?
Пример кода:
void CustomTextEdit::insertTable (int rows_cnt, int columns_cnt)
{
QTextCursor cursor = textCursor ();
QTextTableFormat table_format;
table_format.setCellPadding (5);
// TODO: This call just changed the frame border height, not table itself.
//table_format.setHeight (50);
// Setup columns widths - all is working perfectly.
QVector <QTextLength> col_widths;
for (int i = 0; i < columns_cnt; ++i)
col_widths << QTextLength (QTextLength::PercentageLength, 100.0 / columns_cnt);
table_format.setColumnWidthConstraints (col_widths);
// ...But there is no similar function as setRowHeighConstraints for rows!
// Insert our table with specified format settings
cursor.insertTable (rows_cnt, columns_cnt, table_format);
}
Ответы
Ответ 1
кажется, что вы можете использовать функции setHTML (QString) или insertHTML (QString), чтобы вставить таблицу стилей.
При использовании этой функции со списком стилей таблица стилей будет только примените к текущему блоку в документе. Чтобы применить стиль лист в документе, используйте QTextDocument:: setDefaultStyleSheet() вместо этого.
ref: http://harmattan-dev.nokia.com/docs/platform-api-reference/xml/daily-docs/libqt4/qtextedit.html#insertHtml
appart с помощью прокладок.... в соответствии с http://harmattan-dev.nokia.com/docs/platform-api-reference/xml/daily-docs/libqt4/richtext-html-subset.html вы можете установить объявление шрифта.
Qt, похоже, нацелен на спецификацию CSS2.1, которая будет следовать далее. http://www.w3.org/TR/CSS2/fonts.html#propdef-font
попробовали ли вы указать шрифт в строке таблицы.
передать следующую строку, используя insertHTML, где эта строка делится как QString
<style>
table > tr {font-size: normal normal 400 12px/24px serif;}
</style>
Ответ 2
Если вы просто хотите, чтобы строки были выше, чем их высота текста, вы могли бы попробовать вставить прозрачное изображение 0xN в первую ячейку строки (или 1xN, если Qt не позволит вам делать нулевую ширину).
Также возможно установить верхнее заполнение ячейки таблицы с помощью QTextTableCellFormat:: setTopPadding() или, возможно, установить верхнее поле с QTextBlockFormat:: setTopMargin(). Но как дополнение, так и поля добавляются к высоте макета текста AFAIK, поэтому ни одна из них не очень хороша для установки абсолютной высоты.
Вы посмотрели Calligra? Библиотеки libs/kotext и libs/textlayout реализуют пользовательский QAbstractTextDocumentLayout с гораздо более богатой поддержкой таблицы, чем QTextEdit.
Ответ 3
Вставьте таблицу стилей с помощью this->document()->setDefaultStyleSheet("css goes here");
См. http://qt-project.org/doc/qt-5.0/qtwidgets/qtextedit.html#document-prop
и http://qt-project.org/doc/qt-5.0/qtgui/qtextdocument.html#defaultStyleSheet-prop
(ссылки идут в Qt5 docs, но эти функции доступны и в Qt4.)