c++ Qt中自定义控件的自定义样式

g52tjvyc  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(122)

我想开发一些不完全基于现有绘图原语和子控件的自定义控件。由于整个应用程序应该是可换肤的,我想依赖于自定义样式,也可能依赖于样式表。
我需要为这些新控件配置以下内容:

  • 附加度量
  • 额外调色板条目
  • 其他样式选项

我发现我需要从QStyle的一个子类中派生一个新的样式类,并重写:

  • 用于添加新调色板条目的抛光方法。
  • drawControl(和其他绘制方法)用于绘制自定义控件和自定义部件的逻辑。

有两个问题困扰着我:
1.目前,不同的样式有不同的样式类,已经在Qt中实现了(例如,QMotifStyleQWindowsStyle),每个样式都有不同的设置。通过继承,我需要为每个样式重新实现绘画和额外的设置逻辑,以便正确地集成所有这些样式。我有其他选择吗?
1.我仍然对样式表如何与这些自定义样式一起使用感到困惑。有人能指出一个地方,我可以找到比Qt文档提供的更多的信息吗?(Qt中的示例对我没有太大帮助)。

gblwokeq

gblwokeq1#

样式表的问题不会得到解决,因为它不会在自定义类上得到解决。
添加到自定义样式中的额外好处不会被现有的类理解和照顾。这是因为C++是一种静态语言,(干净和理智)的方式来给运行时类打猴子补丁。一个潜在的解决方案是使用一个代理样式,它 Package 了标准QStyle子类的特定示例。根据你想用它实现的程度,你可以参考两篇文章:Cross-platform code and styles和Look 'n' Feel问答。
如果我是你,我不会去与QStyle的方法。毕竟,你创建自定义部件(例如,FooSomething),所以你可以添加创建完全不同的自定义样式(例如,FooStyle),它甚至不需要模仿QStyle。当然,然后你仍然需要复制类似的功能,例如,支持样式表。

wooyq4lh

wooyq4lh2#

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

  1. QStyle的Qt 4.5文档:

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

相关问题