富文本文档通常包括一些通用的元素,例如段落、框架、表格和列表。这些在 QTextDocument 类中分别使用 QTextBlock,QTextFrame,QTextTable 和 QTextList 描述。不同于文档的其他元素,图片使用一种特殊的文本片段描述,这使得图片可以同普通文本混排。
文档的基本构建单位是 QTextBlock 和 QTextFrame。块本身就包含文本片段(QTextFragment),但是这不会直接影响到高层次的文档结构。
能够对其他文档元素分组的是 QTextObject 的子类。这些元素被分为两种类型:对文本块分组的是 QTextBlockGroup 的子类,对文本片段和其他元素分组的是 QTextFrame 的子类。
QTextDocument *doc = ui-> textEdit->document(); //获取文档对象QTextFrame *rootFrame = doc->rootFrame(); //获取根框架
QTextFrameFormat frameFormat; //创建框架格式
frameFormat.setBorderBrush(Qt::red); //设置边界颜色
frameFormat.setBorder(5); //设置边界宽度
rootFrame->setFrameFormat(frameFormat); //给框架使用格式
QTextFrameFormat frameFormat2;
frameFormat2.setBackground(Qt::lightGray); //设置背景色
frameFormat2.setMargin(10); //设置边距
frameFormat2.setPadding(5); //设置填充
frameFormat2.setBorder(2);
frameFormat2.setBorderStyle(QTextFrameFormat::BorderStyle_Dotted); //设置边框样式
QTextCursor cursor = ui->textEdit->textCursor(); //获取光标
cursor.insertFrame(frameFormat2); //在光标处插入框架遍历文档框架添加槽函数的实现代码
void MainWindow::showTextFrame()
{
QTextDocument * doc = ui->textEdit->document();
QTextFrame *frame = doc->rootFrame();
QTextFrame::iterator it; //建立QTextFrame类的迭代器
for (it = frame->begin(); !(it.atEnd()); ++it) {
QTextFrame * childFrame = it.currentFrame(); //获取当前框架的指针
QTextBlock childBlock = it.currentBlock(); //获取当前文本块
if (childFrame)
qDebug() << "frame";
else if (childBlock.isValid())
qDebug() << "block:" << childBlock.text();
}
}
遍历文本块添加槽函数的实现代码
void MainWindow::showTextBlock()
{
QTextDocument* doc = ui->textEdit->document();
QTextBlock block = doc->firstBlock(); //获取文档的第一个文本块
for(int i = 0; i < doc->blockCount();i++) {
qDebug() << QString("文本块%1,文本块首行行号为:%2,长度为:%3,内容为:")
.arg(i).arg(block.firstLineNumber()).arg(block.length())
<< block.text();
block = block.next();
}
}