多行输入框QTextEdit
QTextEdit
是一个多行输入框控件,支持富文本和 markdown 格式,当文本内容超出编辑框的范围时能自动提供滚动条。
QPlainTextEdit
是只支持富文本格式的多行输入框,属性和使用上与QTextEdit
几乎没有区别。
QTextEdit属性
属性 | 说明 |
---|---|
markdown | 输入框内容,支持 markdown 格式,将 markdown 文本转化成 html 。 |
html | 输入框内容,支持大部分 html 标签,包括 img 和 table 等。 |
placeHolderText | 输入框为空时显示的内容。 |
readOnly | 是否是只读的。 |
undoRedoEnable | 是否开启撤回和反撤回功能(即 Ctrl + z 和 Ctrl + y)。 |
autoFormating | 开启自动格式化。 |
tabstopWidth | 按下 tab 缩进多少空间。 |
overwriteMode | 是否开启覆写模式(即光标在文本中间时,输入的内容会覆盖光标后面的内容)。 |
acceptRichText | 是否接收富文本内容。 |
verticalScrollBarPolicy | 垂直方向滚动条的出现策略。 Qt::ScrollBarAsNeeded 为根据内容自动决定是否需要滚动条(默认值);Qt::ScrollBarAlawysOff 总是关闭滚动条;Qt::ScrollBarAlawysOn 总是显示滚动条。 |
horizontalScrollBarPolicy | 水平方向滚动条的出现策略。 Qt::ScrollBarAsNeeded 为根据内容自动决定是否需要滚动条(默认值);Qt::ScrollBarAlawysOff 总是关闭滚动条;Qt::ScrollBarAlawysOn 总是显示滚动条。 |
注意,将
QTextEdit
的内容获取为html
格式的接口是toPlainText()
。
QTextEdit信号
信号 | 说明 |
---|---|
textChanged() | 文本内容改变时触发。 |
selectionChanged() | 选中范围改变时触发。 |
cursorPositionChanged() | 光标移动时触发。 |
undoAvailable(bool) | 可以进行 undo 操作时触发。(很少使用) |
redoAvailable(bool) | 可以进行 redo 操作时触发。(很少使用) |
copyAvaiable(bool) | 文本被选中/取消选中时触发。 |
代码获取QTextEdit输入框的内容
通过 toPlainTextEdit()
接口获取输入框的内容,注意返回值是 const QString
类型:
//widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}void Widget::on_textEdit_textChanged()
{const QString& content=ui->textEdit->toPlainText();ui->lineEdit->setText(content);
}
代码获取QTextEdit的光标位置和选中内容
QTextEdit
中包含了⼀个 QTextCursor
对象,通过这个对象可以获取到当前光标位置和选中的内容。
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}void Widget::on_textEdit_cursorPositionChanged()
{const QTextCursor& cursor=ui->textEdit->textCursor();qDebug()<<"PositionChangedTo:"<<cursor.position();
}void Widget::on_textEdit_selectionChanged()
{const QTextCursor& cursor=ui->textEdit->textCursor();qDebug()<<"selectChangedTo:"<<cursor.selectedText();
}
当光标处于不同的位置时,
cursor.position()
获取当前光标的位置。
当光标选中不同的子串时,
cursor.selectedText()
可以获取选中的内容。