如何在QTextTable中更改行高

31

我正在编写一个复杂的富文本编辑器,继承自QTextEdit类。它必须能够插入、调整大小并应用各种格式到嵌入表格中。

我发现了设置列宽度的函数 (setColumnWidthConstraints)。 但是没有函数可以改变行高度。

是否有任何方法可以实现这个功能?

示例代码:

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
@Cool_Coder 这只是改变了所有框架的高度(即边框将显示的位置)。但我需要为表格的任何单独行指定高度。 - eraxillan
可以请您展示一些代码,这样我才能对其进行评论吗? - Cool_Coder
5
我花了一点时间查找相关文档,但没有发现强制设置高度的方法或继承方法。我能想到的最好办法是将setCellPadding强制设置为一个较大的数字来达到所需的高度,然后再使用setColumnWidthConstraints将宽度调整回来。 - Nicholas Smith
2
@NicholasSmith 感谢你的时间。那么,你认为没有明确的方法来实现我想要的吗? - eraxillan
6
@NicholasSmith 很遗憾的消息:/ 我的50点声望因无意义的方式而丧失了。但是悲伤的真相总比美丽的谎言更好。 - eraxillan
显示剩余7条评论
4个回答

1

看起来你可以使用setHTML(QString)或insertHTML(QString)函数来插入样式表。

当在样式表中使用此函数时,样式表仅适用于文档中的当前块。为了在整个文档中应用样式表,请改用QTextDocument::setDefaultStyleSheet()。

参考:http://harmattan-dev.nokia.com/docs/platform-api-reference/xml/daily-docs/libqt4/qtextedit.html#insertHtml

除了使用shims之外,根据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>

1
如果你只想让行的高度比文本高度要高,可以尝试在行的第一个单元格中插入一个0xN的透明图像(如果Qt不允许您设置零宽,则可以尝试1xN)。
也可能通过QTextTableCellFormat::setTopPadding()设置表格单元格的顶部填充,或者使用QTextBlockFormat::setTopMargin()设置顶部边距。但是,据我所知,padding和margin都会添加到文本布局高度中,因此它们都不适合设置绝对高度。
你看过Calligra吗?其libs / kotext和libs / textlayout库实现了一个自定义的QAbstractTextDocumentLayout,具有比QTextEdit更丰富的表格支持。

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接