2

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

问题看起来像这样:

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

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

  • 其他指标
  • 额外的调色板条目
  • 其他样式选项

在互联网和文档上挖掘,我发现我需要从一个QStyle子类派生一个新的样式类,并覆盖波兰方法以添加新的调色板条目,以及drawControl(和其他绘制方法)为自定义控件绘制逻辑和定制零件。

我有两个困扰我的问题:

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

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

4

2 回答 2

2

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

已经存在的类不会理解和照顾添加到自定义样式的额外好处。这是因为 C++ 是一种静态语言,并且没有(干净和理智的)方法来对运行时类进行猴子补丁。一个潜在的解决方案是使用包装标准 QStyle 子类的某个实例的代理样式。根据你想用它实现多少,你可以参考两篇文章:跨平台代码和样式Look 'n' Feel Q & A

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

于 2009-06-20T17:15:22.100 回答
1
  1. 另一种方法是用来QPalette获得正确的颜色并QStyle获得正确的间距。

  2. QStyle的Qt 4.5文档:

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

于 2009-06-19T20:43:02.767 回答