在 QTextDocument 中设置默认字符格式
Set default character format in QTextDocument
我有一个 QTextEdit
,用户可以在其中编辑 QTextDocument
s。
我想为文档设置默认颜色和字体,但是当文档中没有文本时,格式被丢弃。
这是我的代码:
QTextDocument *d = new QTextDocument;
QTextCursor cur(d);
cur.select(QTextCursor::Document);
QTextBlockFormat f1;
f1.setBackground(Qt::black);
f1.setForeground(Qt::yellow);
cur.setBlockFormat(f1);
QTextCharFormat f2;
f2.setForeground(Qt::yellow);
QFont font("Times New Roman", 12);
f2.setFont(font);
cur.setBlockCharFormat(f2);
editor->setDocument(d);
当显示编辑器时,我看到一条黑色背景的线,具有一定的高度。看来这行得通。
但是,我一开始输入,行号就变小了,我看不到任何文字。选择输入的文字时,看到是黑字(黑底),字体也变了。
当我使用光标插入一些非空文本时,一切正常,并且格式在编辑时没有改变:
// Same as above...
cur.insertText("A");
editor->setDocument(d);
有没有办法让编辑器保持格式,而不插入虚拟文本?
我无法在编辑器上使用样式表或调色板,如本主题的其他问题中所述。所有都必须使用 QTextFormat
s
直接完成
我终于自己找到了解决方案。
问题是编辑器的光标没有所需的样式信息,正在插入默认样式的文本。必须更新编辑器的光标。
解决方法是简单地将光标移动到文档的开头,在那里它将获取样式:
// Build document as required...
editor->setDocument(d);
// This fixes the problem:
QTextCursor editorCursor = editor->textCursor();
editorCursor.movePosition(QTextCursor::Start);
editor->setTextCursor(editorCursor);
我有一个 QTextEdit
,用户可以在其中编辑 QTextDocument
s。
我想为文档设置默认颜色和字体,但是当文档中没有文本时,格式被丢弃。
这是我的代码:
QTextDocument *d = new QTextDocument;
QTextCursor cur(d);
cur.select(QTextCursor::Document);
QTextBlockFormat f1;
f1.setBackground(Qt::black);
f1.setForeground(Qt::yellow);
cur.setBlockFormat(f1);
QTextCharFormat f2;
f2.setForeground(Qt::yellow);
QFont font("Times New Roman", 12);
f2.setFont(font);
cur.setBlockCharFormat(f2);
editor->setDocument(d);
当显示编辑器时,我看到一条黑色背景的线,具有一定的高度。看来这行得通。
但是,我一开始输入,行号就变小了,我看不到任何文字。选择输入的文字时,看到是黑字(黑底),字体也变了。
当我使用光标插入一些非空文本时,一切正常,并且格式在编辑时没有改变:
// Same as above...
cur.insertText("A");
editor->setDocument(d);
有没有办法让编辑器保持格式,而不插入虚拟文本?
我无法在编辑器上使用样式表或调色板,如本主题的其他问题中所述。所有都必须使用 QTextFormat
s
我终于自己找到了解决方案。
问题是编辑器的光标没有所需的样式信息,正在插入默认样式的文本。必须更新编辑器的光标。
解决方法是简单地将光标移动到文档的开头,在那里它将获取样式:
// Build document as required...
editor->setDocument(d);
// This fixes the problem:
QTextCursor editorCursor = editor->textCursor();
editorCursor.movePosition(QTextCursor::Start);
editor->setTextCursor(editorCursor);