【Qt】控件——QPlainTextEdit使用简单介绍:常用方法及信号、逐行读取编辑框的内容、使用自带的快捷菜单、作为日志显示窗口

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类,继承关系如下:

【Qt】控件——QPlainTextEdit使用简单介绍:常用方法及信号、逐行读取编辑框的内容、使用自带的快捷菜单、作为日志显示窗口_第1张图片

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。

你可能感兴趣的:(QT,qt,ui,开发语言)