介绍QTextEdit简单使用,包括插入图片和表格。并表格单元格设置、内容选择、删除。
表格
- 插入表格
auto *table = ui->textEdit->textCursor().insertTable(2, 1, tableFormat);
- 设置表格格式
QTextTableFormat tableFormat;
tableFormat.setBorderCollapse(true);
tableFormat.setCellSpacing(0);
tableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_None);
tableFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100));
setBorderCollapse
设置是否合并相邻单元格的边框。
setCellSpacing
设置单元格周围的空间。
[图片上传失败...(image-e82064-1664444181948)]
setWidth
可以按照绝对值或者百分比设置表格的宽度。100%表示表格横向填满文档。
-
设置单元格
QTextBlockFormat blockFormat; blockFormat.setAlignment(Qt::AlignCenter); QTextTableCell cell = table->cellAt(0, 0); QTextTableCellFormat cellFormat; cellFormat.setFontPointSize(15); cell.setFormat(cellFormat); cell.firstCursorPosition().setBlockFormat(blockFormat); cell.firstCursorPosition().insertText(ui->leTitle->text().trimmed());
QTextTableCellFormat
设置每个单元格的格式,比如单元格的边框宽度、颜色以及边距。
QTextBlockFormat
设置单元格的文本格式,比如居中对齐。
横线
可以通过Frame或者Table的方式插入横线。
QTextFrameFormat frameFormat;
frameFormat.setHeight(1);
frameFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100));
frameFormat.setBackground(Qt::darkGray);
ui->textEdit->textCursor().insertFrame(frameFormat);
ui->textEdit->moveCursor(QTextCursor::MoveOperation::NextBlock);
注意:ui->textEdit->moveCursor(QTextCursor::MoveOperation::NextBlock);
用于移动到下一个段落,不然后续操作还在当前Frame内。
使用表格时,插入1*1
的表格,将上边框或者下边框设为1即可。
图片
可以直接插入QImage,不过最好的办法是使用资源,可以控制图片细节。
ui->textEdit->document()->addResource(QTextDocument::ImageResource, QUrl("canvas"), canvas);
QTextImageFormat imageFormat;
imageFormat.setName("canvas");
imageFormat.setQuality(100);
imageFormat.setWidth(contentRect.width());
ui->textEdit->textCursor().insertImage(imageFormat);
内容选择及删除
比如选择单元格内容。获取单元格的光标起始位置,然后保持锚点不变,移动到单元格末尾。
auto cursor = table->cellAt(0, 0).firstCursorPosition();
int delta = table->cellAt(0, 0).lastPosition() - table->cellAt(0, 0).firstPosition();
cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, delta); // 保持锚点,并把光标移到末尾
cursor.removeSelectedText(); // 删除锚点到末尾内容
cursor.insertText("hello");
获取选择部分文本
同样是先选择内容,然后可以通过selectedText
、selection
获取选择部分。需要注意的是,selectedText
获取纯文本,不包含富文本内容,另外换行符会被编码为U+2029
。
QTextCursor Class | Qt GUI 6.3.2
QString QTextCursor::selectedText() const
Returns the current selection's text (which may be empty). This only returns the text, with no rich text formatting information. If you want a document fragment (i.e. formatted rich text) use selection() instead.
Note: If the selection obtained from an editor spans a line break, the text will contain a Unicode U+2029 paragraph separator character instead of a newline \n character. Use QString::replace() to replace these characters with newlines.
QTextDocumentFragment QTextCursor::selection() const
Returns the current selection (which may be empty) with all its formatting information. If you just want the selected text (i.e. plain text) use selectedText() instead.
Note: Unlike QTextDocumentFragment::toPlainText(), selectedText() may include special unicode characters such as QChar::ParagraphSeparator.
auto cursor = diagnosisTable->cellAt(0, 0).firstCursorPosition();
int delta = diagnosisTable->cellAt(0, 0).lastPosition() - diagnosisTable->cellAt(0, 0).firstPosition();
cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, delta); // 保持锚点,并把光标移到末尾
qDebug() << cursor.selectedText().replace(QChar::ParagraphSeparator, '\n');
qDebug() << cursor.selection().toPlainText();
版权声明:本文为「txfly」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.jianshu.com/p/2255fc0b9484