2009-06-19 118 views
2

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

的问题是这样的:

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

我需要配置这些新的控件有以下几种:

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

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

我有打扰我两个问题:

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

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

+1

JFYI,它被写为Qt,而不是QT。 – 2009-06-20 08:59:08

回答

2

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

添加到自定义样式中的额外好吃的东西将不会被现有的类所理解和照顾。这是因为C++是一种静态语言,并且没有(干净而健全)的方式来对运行时类进行猴式修补。一个潜在的解决方案是使用包装标准QStyle子类的特定实例的代理风格。根据你想要达到多少,你可以参考两篇文章:Cross-platform code and stylesLook 'n' Feel Q & A

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

1
  1. 另一种可能是使用QPalette以获得正确的色彩和QStyle以获得正确的间距。

  2. QStyle's documentation Qt的4.5:

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

+0

仍然,问题1没有解决:我想为新的零件,子控件和自定义控件添加绘画逻辑,并且我希望不会为每个样式子类添加它。 – 2009-06-20 07:35:33