Qt控件-QPlainTextEdit使用
参考链接:
https://blog.csdn.net/seniorwizard/article/details/109726147;
https://blog.csdn.net/seniorwizard/article/details/109726147
文章目录
- Qt控件-QPlainTextEdit使用
- QPlainTextEdit控件简单介绍
- 1. 逐行读取文本编辑框的内容
- 2. 使用QPlainTextEdit自带的快捷菜单
- 3. 作为日志显示窗口
QPlainTextEdit控件简单介绍
QPlainTextEdit是一个多行纯文本编辑器控件,用于显示和编辑多行简单文本。
QPlainTextEdit继承自QAbstractScrollArea类,继承关系如下:
QPlainTextEdit支持文本段落,默认情况下,一个换行符表示一个段落。QPlainTextEdit控件中的文档可以是一个或者多个段落组成,且段落中的每个字符都可以有其自己的属性,比如自己的字体和颜色。
QPlainTextEdit常用方法:
函数名 | 说明 |
---|---|
setPlainText(const QString &text) | 设置多行文本框的内容 |
insertPlainText(const QString &text) | 插入普通文本 |
appendPlainText(const QString &text) | 添加普通文本 |
toPlainText() | 获取到所有文字 |
appendHtml(const QString &html) | 添加HTML文本内容 |
setReadOnly(bool op) | 设置成只读模式 |
isReadOnly() | 是否是只读模式 |
setLineWrapMode() | 设置换行模式,取值有: QPlainTextEdit::NoWrap 不自动换行 QPlainTextEdit::WidgetWidth 根据文本框的宽度自动换行 |
lineWrapMode() | 获取换行模式 |
QPlainTextEit常用的信号:
信号名 | 说明 |
---|---|
textChanged() | 文本内容发生改变时触发 |
selectionChanged() | 选中内容发生改变时触发 |
cursorPositionChanged() | 光标位置发生改变时触发 |
copyAvaliable() | 复制可用时触发 |
redoAvaliable() | 重做可用时触发 |
undoAvaliable() | 撤销可用时触发 |
QPlainTextEit提供cut()
、copy()
、paste()
、undo()
、redo()
、clear()
、selectAll()
等标准编辑功能的槽函数。
QPlainText的文字内容以QTextDocument类型存储,函数QPlainTextEdit::document()
返回文档对象的指针。
QTextDocument以文本块的方式存储,一个文本块是一个段落,每个段落以回车符结束。QTextDocument提供一些函数实现对文本内容的存取:
int blockCount()
:获取文本块个数;QTextBlock findBlockByNumber(int blockNumber)
:读取某个文本块,序号从0开始;通过QTextBlock::text()可以获取纯文本文字。
1. 逐行读取文本编辑框的内容
void MainWindow::on_pushButton_Update_clicked()
{
// 将文本框中的内容更新到下拉表中
QTextDocument *doc = ui->plainTextEdit_Edit->document();
int nCnt = doc->blockCount();
for(int i=0;i<nCnt;++i)
{
QTextBlock textBlock = doc->findBlockByNumber(i);
QString strtext = textBlock.text();
ui->comboBox->insertItem(i,strtext);
}
}
2. 使用QPlainTextEdit自带的快捷菜单
void MainWindow::on_plainTextEdit_Edit_customContextMenuRequested(const QPoint &pos)
{
// 自带的右键快捷菜单信号槽函数
// 创建并显示标准弹出式菜单
QMenu *menu = ui->plainTextEdit_Edit->createStandardContextMenu(); // 创建菜单
menu->exec(pos);
}
3. 作为日志显示窗口
示例代码:
void AddLog(const char *fmt,...)
{
QPlainTextEdit *plainTextEdit = ui->showInformation_plainTextEdit;
// 设置当前控件为只读
if(!ui->showInformation_plainTextEdit->isReadOnly())
{
ui->showInformation_plainTextEdit->setReadOnly(true);
}
// 设置光标到文本末尾
plainTextEdit->moveCursor(QTextCursor::End,QTextCursor::MoveAnchor);
va_list list;
va_start(list,fmt);
QDate date = QDate::currentDate();
QTime time = QTime::currentTime();
QString str = QString().vsprintf(fmt,list);
va_end(list);
QString strtext = "";
strtext.sprintf("[%04d-%02d-%02d %02d:%02d:%02d.%03d] %s\r\n",date.year(),date.month(),date.day(),time.hour(),time.minute(),time.second(),time.msec(),str.toStdString().data());
ui->showInformation_plainTextEdit->insertPlainText(strtext);
// 移动滚动条到底部
QScrollBar * scrollbar = ui->showInformation_plainTextEdit->verticalScrollBar();
if(scrollbar)
{
scrollbar->setSliderPosition(scrollbar->maximum());
}
}
QPlainTextEdit使用示例:https://gitee.com/zoya23/qt-examples。