针对Qt的setParent函数的研究

在Qt中,通过setParent给一个QWidget添加一个孩子是一项耗时的操作,包括触发ChildAdded、parentChanged事件、
解析字体和调色板、处理布局方向和本地化、同步Enable状态、继承样式、应用样式、传播样式、根据绘制层递归设置重绘区等。了解这里面的实现细节可以让我们更全面地了解掌握Qt。另外,还能发现一些对性能友好的用法。
例如,往已经显示的QWidget添加控件时,可以考虑创建完后添加到界面树中,相比自顶向下依次创建,大概能提高10%~20%的性能

//A方法:(建议):
QWidget * parent= new QWidget();
QWidget * toBeAddedA = new QWidget(parent);
QWidget * toBeAddedB = new QWidget(parent);
parent->setParent(alreadShowWidget);//最后添加到界面树中
//B方法:(不建议):
QWidget * parent= new QWidget(alreadShowWidget);
QWidget * toBeAddedA = new QWidget(parent);
QWidget * toBeAddedB = new QWidget(parent);

在这里插入图片描述

当然,对于简单界面的创建,不必过度强制推行这种形式,更不建议过早优化,因为这种方式带来的提升是有限的,这里创造的价值不值得我们为此推行一个新的规则。而对于复杂界面的创建,则可以参考这里的建议;或后续采用.ui文件的LoadUI形式,也可以获得较好的性能表现。
在研究这里的创建细节时,我们发现我们的创建性能仍有很大的优化空间。由于目前的样式表过于复杂,导致在添加Widget时解析样式耗时过长,这块平台正计划进行系统性的性能优化。这部分优化后将能大大提高整体界面创建的速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值