- 博客(6)
- 收藏
- 关注
原创 Qt 6.9.2 动画卡顿(掉帧)问题
经过测试,是由于threaded渲染模式下,Qt错误地认为当前不能够继续使用vsync同步而换用timer同步导致的。其中,threaded渲染模式是多线程渲染,相对于basic的单线程渲染而言。vsync同步是一种多线程渲染的同步方式,当Qt认为渲染将要错过下一帧时,就会自动切换为timer模式。最近把一个Qt6.5的项目升级到了Qt 6.9.2版本(为了使用更新版本的编译器)。结果发现,升级后,qml的所有动画(Animation)效果全部出现了卡顿、掉帧的情况。
2025-09-05 23:52:19
223
原创 c++从字符串中获取模板参数
第二个参数就是指,如果没有指定"A"的值,返回默认的数字 0。python传参时,可以指定: [name1] = xxx,[name2] = xxx,而且具有默认值的参数也不需要放在参数列表的末尾。函数内部,通过 Tag::getIntArg( "A" ) Tag::getBoolArg( "B" ) 来获取传递的参数。( 当然,这里用的至少是 C++17,要是用低版本写......😇😇😇)是一个用来返回两者较小值的模板函数,防止字符串访问越界 (因为编译器会处理整个宏的每一行代码)。
2025-08-09 18:07:21
387
原创 Qt qml Shape存在内存泄漏
虽然我一百个不相信Qt库竟然会出这种问题,但当内存泄漏达到2000MB时,而换用Canvas则只有三百多MB时,我只能这么认为了。由于代码里面有大量的动态创建/销毁Qml对象的过程,所以一开始怀疑是忘记动态destroy()。在软件模式下,Shape默认把各种对象绘制到纹理上,再把纹理上传到opengl进行绘制。而且,Shape本身内存占用也很大,因为它相当于是存储了一张图片,再加上内存泄漏。今天测试一个基于Qt qml的程序的时候,发现其内存一直在增长,于是怀疑有内存泄漏。
2025-03-02 21:46:26
342
1
原创 Qml list<var>和原生javascript列表的区别
由此可见,对于元素为对象的情况,list<var>通过[ ]访问返回的是一个值类型,而不是元素的引用。也失去了作用,因为qml_list[0]返回了一个拷贝,所以修改后,qml_list[0][0]仍然是 1。对于前两种情况,qml_list[0]都是被访问的,自动调用的是Property的getter,获得值类型。而qml_list[0] = [100,2,3]则调用的是setter,即赋值器,因而修改成功。QML中 list 是内建的qml值类型,所以它也满足上面这一点,即通过值进行传递。
2025-02-20 19:39:41
472
原创 c++模板元Lambda
至此,我们就实现了constEval了。我称它为模板元Lambda。这个东西,就是对编译器开销太大了。不过,只要全局变量GlobalArgNum小于30,一般情况下编译器应该能撑住。如果只是在constEval里面循环的话,表现还是很不错的。像文章开头的MatMul矩阵乘法,对于两个9*9的矩阵乘法的编译大概只需要4秒钟就可以了。这里面constEval循环的次数是9 * 9 * 9 = 729次。综上可见,还是用模板存储变量的问题。Args无论是增删改查对编译器的开销都太大了。
2024-12-10 20:27:28
1863
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅