1

我正在尝试为单个字符更新 QTextCharFormat。但它不适用:

QTextCursor cursor(document());
cursor.setPosition(4);
QTextCharFormat format;
format.setFontPointSize(sizeString.toInt());
cursor.mergeCharFormat(format);
qDebug() << "SET POS " << cursor.position() << " TO " << sizeString.toInt();

QTextCursor cursor2(document());
cursor.setPosition(4);
QTextCharFormat charformat = cursor2.charFormat();
QFont font = charformat.font();
qDebug() << " LOADED FONTSIZE: " << font.pointSize();

输出:

SET POS  4  TO  16
 LOADED FONTSIZE:  36

知道缺少什么吗?

4

2 回答 2

2

要应用更改,您必须选择部分文本(如在真实编辑器中)。您只需将光标设置到某个位置,而无需实际选择事物。

如果要选择文本,则必须将光标移动到另一个位置并保持选择开始。

cursor.setPosition(4);
cursor.setPosition(5, QTextCursor::KeepAnchor);

这会将光标设置到位置 4。然后将光标移动到位置 5,但保留选择锚点。这导致选择位置 4 和 5 之间的所有内容。

现在您的更改将应用​​于选择。

于 2016-09-16T13:12:34.787 回答
1

正确用法示例:

获取 QTextEdit 的光标

QTextEdit *editor = new QTextEdit();
QTextCursor cursor(editor->textCursor());
cursor.movePosition(QTextCursor::Start); 

设置不同的 QTextCharFormat

QTextCharFormat plainFormat(cursor.charFormat());

QTextCharFormat headingFormat = plainFormat;
headingFormat.setFontWeight(QFont::Bold);
headingFormat.setFontPointSize(16);

QTextCharFormat emphasisFormat = plainFormat;
emphasisFormat.setFontItalic(true);

现在使用不同的格式在文本编辑中插入文本

cursor.insertText(tr("Character formats"),
                  headingFormat);

cursor.insertBlock(); // Single character
cursor.insertText(tr("a"), emphasisFormat);
cursor.insertText(tr("b"), headingFormat);
cursor.insertBlock();


cursor.insertText(tr("Text can be displayed in a variety of "
                              "different character formats. "), plainFormat);
cursor.insertText(tr("We can emphasize text by "));
cursor.insertText(tr("making it italic"), emphasisFormat);

如果您想实时更改可编辑小部件的样式以仅渲染具有不同样式的文本,则此网址中有一个示例:语法荧光笔示例

于 2016-09-16T12:41:59.977 回答