有没有人有使用Qt中自定义样式的自定义小部件的经验? (我使用的是Qt 4.5)
问题看起来像这样:
我想开发一些不完全基于现有绘图基元和子控件的自定义控件。由于整个应用程序应该是可换肤的,我想依赖自定义样式,也可以在样式表上使用。
我需要为这些新控件配置以下内容:
在互联网和文档上挖掘,我发现我需要从一个QStyle
子类派生一个新的样式类,并覆盖用于添加新调色板条目的抛光方法,以及drawControl
(和其他绘制方法)用于绘制自定义控件和自定义零件的逻辑。
我有两个困扰我的问题:
目前,在Qt中已经实现了不同样式的不同样式类。 (例如QMotifStyle
,QWindowsStyle
),每个都有不同的设置。通过继承,我需要为每种样式重新实现绘画和附加设置逻辑,以便正确地集成到所有这些样式中。我还有其他选择吗?
我仍然对样式表如何与这些自定义样式一起使用感到困惑。任何人都可以指向一个我可以找到比Qt文档提供的更多信息的地方吗? (Qt中的样本对我没有太多帮助。)
答案 0 :(得分:2)
样式表问题将无法解决,因为它不会在自定义类上解决。
添加到自定义样式的额外好处将不会被已有的类理解和处理。这是因为C ++是一种静态语言,并且没有(干净且理智)的方式来修补运行时类。一种潜在的解决方案是使用包含标准QStyle子类的某个实例的代理样式。根据您希望用它实现的程度,您可以参考两篇文章:Cross-platform code and styles和Look 'n' Feel Q & A。
如果我是你,我不会采用QStyle方法。毕竟,你创建自定义小部件(例如FooSomething),所以你也可以添加创建完全不同的自定义样式(例如FooStyle),它甚至不需要模仿QStyle。当然,你仍然需要复制类似的功能,例如支持样式表。
答案 1 :(得分:1)
另一种方法是使用QPalette
获取正确的颜色,QStyle
以获得正确的间距。
警告:目前是Qt样式表 自定义QStyle子类不支持。 我们计划在将来的某个版本中解决此问题。