首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QStyle所有权

QStyle所有权
EN

Stack Overflow用户
提问于 2016-06-13 09:48:32
回答 1查看 575关注 0票数 3

在Qt应用程序中使用样式时,我遇到了一个有趣的QStyle所有权问题。QStyle继承自QObject,后者通常接受QObject* parent作为构造函数参数来管理其子生命周期。但是QStyle的构造函数没有这个构造函数参数。第一个问题--为什么?

此外,当使用QApplication::setStyle(QStyle * style)将样式设置为整个应用程序时,文档表明应用程序对象拥有样式的所有权。因此,编写(如文档中的) app->setStyle(new MyWonderStyle());应该是安全的,应用程序应该在不再使用时删除样式。我希望它能做到。

但是对于QWidget::setStyle(QStyle* style),文档中说所有权是不转移的。因此,在我看来,如果小部件的样式设置不止一次或小部件被删除时,编写widget->setStyle(new MyWonderStyle());会导致内存泄漏。

那么,我的问题是,管理自定义样式的最佳实践是什么,特别是Qt中的所有权?是否有某种标准的方法,还是完全由开发人员来处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-13 12:12:08

我想说的是,QApplication::setStyle(QStyle*)拥有QStyle的所有权,因为有一个重载的函数QApplication::setStyle(QString)。这个函数在内部创建一个QStyle对象,并获得它的所有权,因为在这种情况下没有其他选项。在一种功能中取得所有权,而不是在另一种功能中使用它可能会导致混乱。

另一方面,QWidget不拥有QStyle,因为您可能希望将相同的样式分配给多个QWidget

缺少QStyle(QObject*)构造函数可能只是一个疏忽。您可以安全地使用setParent(QObject*)。事实上,QApplication::setStyle(QStyle*)使用setParent来获得QStyle的所有权。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37786568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档