Qt 中自定义小部件的自定义样式
Posted
技术标签:
【中文标题】Qt 中自定义小部件的自定义样式【英文标题】:Custom styles for custom widgets in Qt 【发布时间】:2009-06-19 18:50:01 【问题描述】:有没有人在 Qt 中使用自定义样式、自定义小部件的经验? (我使用的是 Qt 4.5)
问题如下:
我想开发一些不完全基于现有绘图图元和子控件的自定义控件。由于整个应用程序应该是可换肤的,我想依赖自定义样式,也可能在样式表上。
我需要为这些新控件配置以下内容:
其他指标 其他调色板条目 其他样式选项在互联网和文档上挖掘,我发现我需要从 QStyle
子类中派生一个新的样式类,并覆盖波兰方法以添加新的调色板条目,以及 drawControl
(和另一个绘制方法)用于绘制自定义控件和自定义部件的逻辑。
我有两个困扰我的问题:
目前,针对不同的样式有不同的样式类,已经在 Qt 中实现。 (例如QMotifStyle
、QWindowsStyle
),每个都有不同的设置。通过继承,我需要为每种样式重新实现绘画和附加设置逻辑,以便正确集成所有这些样式。我还有其他选择吗?
我仍然对如何将样式表与这些自定义样式一起使用感到困惑。谁能指出我可以找到比 Qt 文档提供的信息更多信息的地方? (Qt 中的示例对我帮助不大)。
【问题讨论】:
JFYI,它写成 Qt,而不是 QT。 【参考方案1】:样式表问题不会得到解决,因为它不会在自定义类上。
添加到自定义样式的额外好处将不会被现有的类理解和照顾。这是因为 C++ 是一种静态语言,并且没有(干净和理智的)方法来对运行时类进行猴子补丁。一个潜在的解决方案是使用包装标准 QStyle 子类的某个实例的代理样式。根据你想用它达到多少,你可以参考两篇文章:Cross-platform code and styles和Look 'n' Feel Q & A。
如果我是你,我不会采用 QStyle 方法。毕竟,您创建了自定义小部件(例如 FooSomething),因此您也可以添加创建完全不同的自定义样式(例如 FooStyle),它甚至不需要模仿 QStyle。当然,您仍然需要复制类似的功能,例如支持样式表。
【讨论】:
链接好像失效了。【参考方案2】:另一种方法是使用QPalette
获得正确的颜色,使用QStyle
获得正确的间距。
QStyle
's documentation 用于 Qt 4.5:
警告: Qt 样式表目前是 自定义 QStyle 子类不支持。 我们计划在未来的某个版本中解决这个问题。
【讨论】:
仍然,问题 1 没有解决:我想为新部件、子控件和自定义控件添加绘制逻辑,但我希望我不会为每个样式子类添加它。以上是关于Qt 中自定义小部件的自定义样式的主要内容,如果未能解决你的问题,请参考以下文章