使用QTextEdit实现状态信息显示框

使用QTextEdit实现状态信息显示框:

1,  使用QTextTable,组织状态信息

2,  当状态信息达到一定量时,自动删最早的一条记录。(为这个 查了好久QTextEdit删除内容的方法才实现这功能, 所以留下这篇记录,以备再用。)

void MainWindow::onStatusInfo(int flag,QString msg)
{
    QString text;
    QTextCharFormat chfmt;
    //设置状态信息标签
    switch (flag) {
    case 1:
        text = "INFO";
        chfmt.setForeground(QBrush(Qt::black));
        break;
    case 2:
        text = "WARN";
        chfmt.setForeground(QBrush(Qt::yellow));
        break;
    case 3:
        text = "ERROR";
        chfmt.setForeground(QBrush(Qt::red));
        break;
    default:
        break;
    }
    //在标签之后附加状态信息
    text.append(" "+msg);
    //将插入位置设置到QTextEdit最后一行
    QTextCursor cur = ui->statusTextEditer->textCursor();
    cur.movePosition(QTextCursor::End);
    QTextTabelFormate tableformate;
    tableformate.setBorder(0);
    //插入table,用于显示状态信息
    QTextTable *table = cur.insertTable(2,1,tableformate);
    table->cellAt(0,0).firstCursorPosition().insertText("["+QTime::currentTime().toString("hh:mm:ss")+"]");
    table->cellAt(1,0).firstCursorPosition().insertText(text);
    cur.movePosition(QTextCursor::EndOfBlock,QTextCursor::KeepAnchor,1);
    cur.select(QTextCursor::BlockUnderCursor);
    cur.mergeCharFormat(chfmt);
    cur.clearSelection();
    QScrollBar *bar = ui->statusTextEdit->verticalScrollBar();
    bar->setValue(bar->maximum());
    //状态信息条数+1
    m_status_count ++;
    //如果信息数>50,则删除最早的一条记录
    if(m_status_count >50)
    {
        //将选择光标移至第一个字符
        cur.setPosition(1,QTextCursor::MoveAnchor);
        //选择最早含有最早状态信息的table
        cur.movePosition(QTextCursor::EndOfBlock,QTextCursor::KeepAnchor,1);
        cur.select(QTextCursor::BlockUnderCursor);
        //删除该信息
        cur.removeSelectedText();
        //光标移至QTextEdit末行
        cur.movePosition(QTextCursor::End,QTextCursor::MoveAnchor);
        m_status_count --;
    }

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值