您的位置:首页 > 游戏 > 手游 > 岳阳网站建设免费咨询_旅游网站管理系统php_杭州seo排名费用_云浮网站设计

岳阳网站建设免费咨询_旅游网站管理系统php_杭州seo排名费用_云浮网站设计

2024/11/16 18:07:37 来源:https://blog.csdn.net/Hakuna___Matata/article/details/143788428  浏览:    关键词:岳阳网站建设免费咨询_旅游网站管理系统php_杭州seo排名费用_云浮网站设计
岳阳网站建设免费咨询_旅游网站管理系统php_杭州seo排名费用_云浮网站设计

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 确保了信号和槽的调用是异步的,即在接收者的事件处理线程中执行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com