我想开发一些不完全基于现有绘图原语和子控件的自定义控件。由于整个应用程序应该是可换肤的,我想依赖于自定义样式,也可能依赖于样式表。
我需要为这些新控件配置以下内容:
- 附加度量
- 额外调色板条目
- 其他样式选项
我发现我需要从QStyle
的一个子类中派生一个新的样式类,并重写:
- 用于添加新调色板条目的抛光方法。
drawControl
(和其他绘制方法)用于绘制自定义控件和自定义部件的逻辑。
有两个问题困扰着我:
1.目前,不同的样式有不同的样式类,已经在Qt中实现了(例如,QMotifStyle
,QWindowsStyle
),每个样式都有不同的设置。通过继承,我需要为每个样式重新实现绘画和额外的设置逻辑,以便正确地集成所有这些样式。我有其他选择吗?
1.我仍然对样式表如何与这些自定义样式一起使用感到困惑。有人能指出一个地方,我可以找到比Qt文档提供的更多的信息吗?(Qt中的示例对我没有太大帮助)。
2条答案
按热度按时间gblwokeq1#
样式表的问题不会得到解决,因为它不会在自定义类上得到解决。
添加到自定义样式中的额外好处不会被现有的类理解和照顾。这是因为C++是一种静态语言,(干净和理智)的方式来给运行时类打猴子补丁。一个潜在的解决方案是使用一个代理样式,它 Package 了标准QStyle子类的特定示例。根据你想用它实现的程度,你可以参考两篇文章:Cross-platform code and styles和Look 'n' Feel问答。
如果我是你,我不会去与QStyle的方法。毕竟,你创建自定义部件(例如,
FooSomething
),所以你可以添加创建完全不同的自定义样式(例如,FooStyle),它甚至不需要模仿QStyle。当然,然后你仍然需要复制类似的功能,例如,支持样式表。wooyq4lh2#
1.另一种方法是使用
QPalette
来获得正确的颜色,QStyle
来获得正确的间距。QStyle
的Qt 4.5文档:**警告:**自定义QStyle子类目前不支持Qt样式表。我们计划在未来的版本中解决这个问题。