QTextEdit使用

介绍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");

获取选择部分文本

同样是先选择内容,然后可以通过selectedTextselection获取选择部分。需要注意的是,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

你可能感兴趣的:(QTextEdit使用)