当前位置: 首页 > article >正文

C++ QT UI日志更新

C++ QT进行Log记录,打印然后更新在UI上,一般可以通过QPlainTextEdit进行信息更新

void Diary::appendPlainText(const int& type, const QString& log )
{
    ui->plainTextEdit->moveCursor(QTextCursor::End);
    ui->plainTextEdit->insertPlainText(log);
    ui->plainTextEdit->moveCursor(QTextCursor::End);
}

但存在一个问题,可能在关闭exe时会因为访问已经release的对象造成内存溢出

可以使用以下方法进行log的记录

void Diary::appendPlainText(const int &type, const QString &log)
{
    Q_UNUSED(type)
    if (ui && ui->plainTextEdit)
    {
        QMetaObject::invokeMethod(this, [this, log]{
            ui->plainTextEdit->moveCursor(QTextCursor::End);
            ui->plainTextEdit->insertPlainText(log);
            ui->plainTextEdit->moveCursor(QTextCursor::End); }, Qt::QueuedConnection);
    }
}

这个函数使用了 QMetaObject::invokeMethod 来异步地更新文本编辑器。这意味着更新文本编辑器的操作将在事件队列中排队,稍后由Qt的事件循环处理。这样做的好处是,如果这个函数是在非GUI线程中调用的,它可以安全地更新GUI组件,而不会违反Qt的线程安全规则。Qt::QueuedConnection 确保了信号和槽的调用是异步的,即在接收者的事件处理线程中执行。


http://www.kler.cn/a/395604.html

相关文章:

  • html数据类型
  • 基于Java Springboot快递物流管理系统
  • NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备:大华IPC摄像头局域网访问异常解决办法
  • 初级数据结构——栈
  • Java NIO 深度解析:构建高效的 I/O 操作
  • 深入探索离散 Hopfield 神经网络
  • 爆火的AI智能助手ChatGPT中自注意力机制的演化与优化
  • Kafka一些常用的命令行操作【包含主题命令、生产者和消费者命令】
  • 【重生之我要苦学C语言】深入理解指针6
  • 无人机检测车辆——多目标检测
  • Postman接口测试(断言、关联、参数化、输出测试报告)
  • Win11 终端执行 python xxx.py 没反应
  • 241115
  • 《Java核心技术 卷I》图形界面事件处理适配器类
  • Unix进程
  • 杰控通过 OPCproxy 获取数据发送到服务器
  • 嵌入是开发 之TCP网络编程(一)
  • 界面控件DevExpress Blazor UI v24.1新版亮点 - 全新PDF Viewer等组件
  • SQL Server Service Broker完整示例
  • 【代码大模型】Is Your Code Generated by ChatGPT Really Correct?论文阅读
  • react 中 memo 模块作用
  • 深入理解BERT模型:BertModel类详解
  • [Mysql基础] 表的操作
  • Qt 的 QThread:多线程编程的基础
  • Uniapp 引入 Android aar 包 和 Android 离线打包
  • 跟李笑来学美式俚语(Most Common American Idioms): Part 01