Qt跨应用程序样式问题

时间:2016-09-13 13:12:52

标签: python-2.7 qt pyside

我正在编写在其他第三方应用程序中运行的PySide工具。相同的工具将在多个应用程序中运行,并且应该在这些应用程序之间保持一致 我遇到的问题是,这些应用程序有时使用QT并拥有自己的样式,大概使用QPalette。当我的工具为主应用程序的父项时,它们将主要应用程序样式化。

所以我尝试通过使用我自己的QPalette并设置我的工具主窗口\小部件来使用它来解决这个问题,但是这对小部件的孩子没有任何影响,他们仍然假设主应用程序的样式(不是确定这是否是正确的行为。)

所以我开始使用样式表来自定义整个外观,并且很大程度上这是有效的。但是,它在各种应用程序中仍然不一致。所以要么我没有覆盖足够的样式表参数,要么就是单独使用样式表我无法解决的问题。 Example of same style sheet in Nuke and 3ds Max

我在测试中使用的非常基本的样式表:

QWidget {
    margin: 0px;
    padding: 0px;
    spacing: 0px;
    color:white;
}

我的简明问题是:

  1. 是否可以仅使用样式表完全覆盖QPalette给出的外观?
  2. 如果它和它的相关性,我可能缺少什么,间距\尺寸是不同的。两个窗口都是最小尺寸。除了边距和填充之外,我无法想象会有什么影响它。
  3. 注意:我知道我没有覆盖QGroupbox样式表,即使这样做也不会产生相同的结果。我也尝试过使用em,px和ex。 PySide版本在核武器中是1.0.9,在最大值上是1.2.2,如果这有所不同,我猜它可能会。 感谢

1 个答案:

答案 0 :(得分:1)

不幸的是,由于历史原因,Qt在小部件样式方面确实提供了太多方法来对同一只猫进行换肤,而且样式表不会影响布局。因此,您无法仅使用QSS来描述应用程序的样式,除非您在设计中小心谨慎,否则您将以各种方式设计样式,特别是如果您的代码有很多历史。对于您正在为其构建插件的工具而言,情况就是这样。

首先,您已经意识到一致的样式实际上是所有组件必须遵守的界面。如果插件主机应用程序的插件开发者文档中没有指定此接口,那么它将是丑陋且不必要的。

你可以做的最好的事情是迭代应用程序的其他小部件并嗅探他们的托盘,布局间距等。你基本上必须将它破解成一个工作形状,并希望下一个版本的主机应用程序没有破坏它。由于他们没有在这方面做出任何指定,他们自己没有任何可以考验或反对的东西,所以期望是的,它会打破,是的,它会变得丑陋。这是当忽略接口规范时所得到的。