有人有 Qt 中自定义样式、自定义小部件的经验吗?(我使用的是Qt 4.5)

问题看起来像这样:

我想开发一些不完全基于现有绘图基元和子控件的自定义控件。由于整个应用程序应该是可换肤的,因此我想依赖自定义样式,也可以在样式表上使用。

我需要为这些新控件配置以下内容:

  • 附加指标
  • 额外的调色板条目
  • 额外的款式选项

在互联网和文档中挖掘,我发现我需要从一个派生一个新的样式类 QStyle 子类,并重写用于添加新调色板条目的抛光方法,以及 drawControl (以及其他绘制方法)用于自定义控件和自定义部件的绘制逻辑。

我有两个问题困扰着我:

  1. 目前,不同的样式有不同的样式类,已经在Qt中实现了。(例如。 QMotifStyle, QWindowsStyle),每个都有不同的设置。通过继承,我需要为每种样式重新实现绘画和附加设置逻辑,以便正确集成所有这些样式。我还有其他选择吗?

  2. 我仍然对如何将样式表与这些自定义样式一起使用感到困惑。任何人都可以指出一个地方,在那里我可以找到比 Qt 文档提供的信息更多的信息吗?(Qt 中的示例对我帮助不大)。

有帮助吗?

解决方案

样式表问题将不会得到解决,因为它不会在自定义类上得到解决。

添加到自定义样式中的额外功能将不会被现有的类理解和处理。这是因为 C++ 是一种静态语言,没有(干净且合理的)方法来对运行时类进行猴子修补。一个潜在的解决方案是使用代理样式来包装标准 QStyle 子类的某个实例。根据您想要实现的目标,您可以参考两篇文章: 跨平台代码和样式观感问答.

如果我是你,我不会采用 QStyle 方法。毕竟,您创建了自定义小部件(例如FooSomething),因此您还可以添加创建完全不同的自定义样式(例如FooStyle),它甚至不需要模仿 QStyle。当然,您仍然需要复制类似的功能,例如支持样式表。

其他提示

  1. 另一种方法是使用 QPalette 获得正确的颜色和 QStyle 以获得正确的间距。

  2. QStyle的文档 对于 Qt 4.5:

    警告: Qt样式表目前是 自定义 QStyle 子类不支持。我们计划在未来的版本中解决这个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top