Qt 跨应用程序样式问题

Qt Cross Application Styling Issues

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

所以我尝试通过使用我自己的 QPalette 并设置我的主要工具 window\widget 来解决这个问题,但是这对子部件没有任何影响,它们仍然采用主应用程序(不确定这是否正确)。

所以我开始使用一种风格sheet 来定制整个外观,并且在很大程度上是可行的。但是,它在应用程序之间仍然不一致。因此,要么我没有覆盖足够多的样式 sheet 参数,要么有些事情我无法单独使用样式 sheet 来解决。 Example of same style sheet in Nuke and 3ds Max

很基础的样式sheet我测试用的:

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

我的简明问题是:

  1. 是否可以单独使用样式 sheet 完全覆盖 QPalette 给出的外观?
  2. 如果它是并且它在这里相关,我可能会遗漏什么,spacing\size 是不同的。 windows 都处于最小尺寸。除了 margin 和 padding,我想不出还有什么会影响它。

注意:我知道我没有覆盖 QGroupbox 样式 sheet,即使这样做也不会产生相同的结果。我也尝试过使用 em、px 和 ex。 PySide 版本在 nuke 中是 1.0.9,在 max 中是 1.2.2,如果这有所不同,我想它可能会。 谢谢

不幸的是,由于历史原因,Qt 确实提供了太多方法来为小部件样式设置同一只猫的皮肤,并且样式表不影响布局。因此,您不能仅使用 QSS 来完全描述应用程序的样式,除非您在设计时非常小心,否则您最终会以各种方式设置样式,尤其是当您的代码有很多历史时。您为其构建插件的工具就是这种情况。

首先,您现在已经意识到,一致的样式确实是所有组件都必须遵守的接口。如果在插件宿主应用程序的插件开发者文档中没有指定这个接口,它会很丑陋并且不必要地困难。

您能做的最好的事情就是迭代应用程序的其他小部件并嗅探它们的调色板、布局间距等。您基本上必须将其修改为可用的形状,并希望宿主应用程序的下一个版本不会打破它。由于他们在这方面没有指定任何内容,他们自己没有什么可以测试或开发的,所以期望是,它会崩溃,是的,它会很丑。这就是忽略接口规范时得到的结果。