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