首页 > 系统相关 >Qt opengl和qlabel的update同时更新,内存泄漏问题

Qt opengl和qlabel的update同时更新,内存泄漏问题

时间:2024-03-15 14:23:17浏览次数:48  
标签:Qt opengl int update XVideoWidget label timer QLabel

工作要做一个类似播放器的软件,但是需要自己解码,然后可能多张图像合成再显示,所以不能直接用QT播放视频的模块,就用了QOpenGLWidget来渲染。

后面发现内存一直在涨,一直以为是自己的原因,因为解码分配的内存挺多的,折腾了快一个月了,后面发现是update频繁更新导致;

如下代码,XVideoWidget继承了QOpenGLWidget,渲染代码都删完了,另外创建了一个QLabel,因为update只会触发opengl的paintevent(不信可以自己继承QLabel,在QLabel的paintevent里面打断点),所以手动调用了QLabel->update(),然后就导致了内存一直疯长,去qt的官方社区也没有找到解决办法,折中办法就是降低刷新的频率,但是视频大家都知道,一秒钟要播放几十帧的,没办法在降低了,然后label要实时滚动文字,也需要不停刷新。

我目前没有找到更好的解决办法,不知道大家有其它办法

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//PlayWidget w;
XVideoWidget w;
w.show();
w.this_run();
return a.exec();
}

class XVideoWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT

public:
XVideoWidget(QWidget* parent = NULL) : QOpenGLWidget(parent) {}
void this_run()
{
play_timer_ = new QTimer;
play_timer_->setInterval(5);
connect(play_timer_, &QTimer::timeout, this, &XVideoWidget::handle);
resize(1920, 1079);

label_ = new QLabel(this);
label_->show();
play_timer_->start();
}
public slots:
int handle()
{
update();
label_->update();
return 0;
}
protected:
void initializeGL() {}
void paintGL() {}
void resizeGL(int width, int height) {}
private:
QTimer* play_timer_;
QLabel* label_;
};

标签:Qt,opengl,int,update,XVideoWidget,label,timer,QLabel
From: https://www.cnblogs.com/chenwei-c/p/18075294

相关文章

  • QT 之 QCheckBox 去除边框
    以下两种方法均可去除checkBox前面的边框:方法一:如下图所示,直接在样式表上写以下代码即可,但这第一个方法有个弊端,我在安卓手机上运行后旁边会有个小黑点,不仔细看会看不出来,​​​​故除非第二个方案运行后没反应才使用此方法:效果图:方法二:如下图所示,一样也是在样式表中写......
  • mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql、insert、update、delete)
    sqlmapconfig.xml配置MyBatis的配置文件包含了会深深影响MyBatis行为的设置(settings)和属性(properties)信息。文档的顶层结构如下:configuration配置properties属性settings设置typeAliases类型别名typeHandlers类型处理器objectFactory对象工厂plugins插件environ......
  • QT网络编程之获取本机网络信息
    一.概述查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能,Qt提供了QHostInfo和QNetworkInterface类可以用于此类信息的查询1.QHostInfo类(显示和查找本地的信息)2.QNetworkInterface类(获得应用程序上所在主机的所有网络接口,包括子网掩码和广播地址) 推荐一个不错......
  • QT6.6下android编译及调用自定义so库方法
    一.问题概述   最近需要把QT程序从5.12的桌面环境移植到QT6.6的android下,项目中有很多DLL库要重新编译为so文件,移植到android环境然后调用,中间有很多坑,虽然大体和桌面系统用法相同,但细节上还是有区别的,尤其是so库的调用方法上,过程中也是debug了两天才解决,如果你也遇到了同......
  • QT 自定义QGraphicsItem 缩放后旋转 图形出现漂移问题
    实现自定义QGraphicsItem缩放和旋转时,遇到了这样一个问题:将item旋转一个角度,然后拖拽放大,再次进行旋转时图像会发生漂移。原本以为是放大后中心点位置没有改变,导致旋转时以原中心的旋转出现了偏移,但是重新设置旋转中心setTransformOriginPoint(rect.center());并没有起作用,图像......
  • Qt TCP (小型聊天窗口)
    实现的具体功能为:服务器端需要主动监听,可以主动断开连接,可以发送信息给客户端客户端需要输入主机,端口号,需要主动连接,可以主动断开连接,可以发送信息给服务器端服务器端和客户端都能看到聊天记录服务器端的搭建:创建一个TCP_Server项目1.首先在.Pro文件中添加:QT+=network......
  • Qt TcpSocket的掉线解决方法
    1、tcpip协议没什么好说的,号称保证传输准确可靠,使命必达。协议很大一坨,实际应用上用得上的很少。2、问题所在在使用tcp协议跟服务器连接后(分别测试过windows系统,ubuntu系统单片机带tcpip协议的通讯模块)都发现不能及时反馈或反馈网络已断;(在同一个局域网内和公共网络上......
  • Qt TCP通信客户端断开连接有哪些方法
    在QT中,可以使用以下方法来处理TCP通信客户端断开连接的情况:使用QAbstractSocket::disconnected信号:当客户端与服务器断开连接时,该信号会被触发。你可以连接这个信号到一个槽函数,在槽函数中处理断开连接的逻辑。QObject::connect(socket,&QTcpSocket::disconnected,this,&You......
  • PyQT可视化开发-保姆级教程
    背景因为在公司中负责小工具的开发(数据处理文件生成等),不可避免的会使用到Python的窗体界面,最初都是手敲出来的,费时费力,后来在网上百度了一下,发现一款比较好用的工具-QTdesigner,使用鼠标拖拽就可以完成窗体的设计,方便好用。话不多说。现在就体验一下这个工具的强大之处吧。1.......
  • Windows Server 2025 简体中文版下载 (Inside Preview, updated Mar 2024) - 下一代 W
    WindowsServer2025简体中文版下载(InsidePreview,updatedMar2024)-下一代Windows11ServerWindowsServer2025正式版发布在即请访问原文链接:https://sysin.org/blog/windows-server-2025/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org我们知道Windo......