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

Qt控件-QPlainTextEdit使用

参考链接:
https://blog.csdn.net/seniorwizard/article/details/109726147;
https://blog.csdn.net/seniorwizard/article/details/109726147


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

  • 7
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值