当在Qt应用程序中使用样式时,我遇到了一个有趣的问题,即QStyle所有权。QStyle继承自QObject,通常接受QObject* parent作为构造函数参数来管理其子对象的生命周期。但是,QStyle的构造函数没有这个构造函数参数。第一个问题 - 为什么?
此外,当使用QApplication::setStyle(QStyle * style)设置整个应用程序的样式时,文档说应用程序对象会获取样式的所有权。因此,编写(如文档中所示)app->setStyle(new MyWonderStyle())应该是安全的,并且应用程序在不再使用样式时应该删除样式。我希望它确实这样做。
但是,在QWidget::setStyle(QStyle* style)中,文档说明没有转移所有权。因此,在我的看法中,如果小部件的样式设置超过一次或小部件被删除,则编写widget->setStyle(new MyWonderStyle())会导致内存泄漏。
所以我的问题是 - 在Qt中管理自定义样式的最佳实践特别是所有权方面是什么?是否有某种标准方式,还是完全由开发人员处理?
此外,当使用QApplication::setStyle(QStyle * style)设置整个应用程序的样式时,文档说应用程序对象会获取样式的所有权。因此,编写(如文档中所示)app->setStyle(new MyWonderStyle())应该是安全的,并且应用程序在不再使用样式时应该删除样式。我希望它确实这样做。
但是,在QWidget::setStyle(QStyle* style)中,文档说明没有转移所有权。因此,在我的看法中,如果小部件的样式设置超过一次或小部件被删除,则编写widget->setStyle(new MyWonderStyle())会导致内存泄漏。
所以我的问题是 - 在Qt中管理自定义样式的最佳实践特别是所有权方面是什么?是否有某种标准方式,还是完全由开发人员处理?
QApplication::setStyle
。为什么要专门为单个QWidget
设置样式并多次更改它呢? - JefGliwidget->setStyle(new MyStyle())
这样的内存泄漏。应用程序可能不会多次设置小部件的样式(但通常可能会),但是小部件肯定会在程序结束之前被销毁,留下创建的样式作为孤儿。因此,我很好奇如何在不完全重新设计代码的情况下解决这个问题。 - HiFile.app - best file managerMyStyle()
更改为MyStyle(widget)
,然后就完成了。这不是最干净的解决方案,但它可以解决您的内存泄漏问题。 - JefGliQProxyStyle
从QStyle
继承的,这些类没有以带有parent
参数的构造函数,正如我上面所写的。我相信我可以在我的类中创建这样的构造函数,然后我可以在构造函数体中调用setParent(widget)
,但是...我想QStyle
为什么不在构造函数中使用parent
,这一点我还不理解。 - HiFile.app - best file managerQStyle
源代码也没有给我太多答案。 - JefGli