Qt中自定义小部件的自定义样式

时间:2009-06-19 18:50:02

标签: c++ qt qt4

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

问题看起来像这样:

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

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

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

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

我有两个困扰我的问题:

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

  2. 我仍然对样式表如何与这些自定义样式一起使用感到困惑。任何人都可以指向一个我可以找到比Qt文档提供的更多信息的地方吗? (Qt中的样本对我没有太多帮助。)

2 个答案:

答案 0 :(得分:2)

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

添加到自定义样式的额外好处将不会被已有的类理解和处理。这是因为C ++是一种静态语言,并且没有(干净且理智)的方式来修补运行时类。一种潜在的解决方案是使用包含标准QStyle子类的某个实例的代理样式。根据您希望用它实现的程度,您可以参考两篇文章:Cross-platform code and stylesLook 'n' Feel Q & A

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

答案 1 :(得分:1)

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

  2. Qt 4.5的
  3. QStyle's documentation

      

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