21

我在我的 Kubuntu 12.10 linux 机器上安装了 Qt5 和 Qt4,并注意到以下内容:

  • 使用 Qt4 编译的程序具有原生的 KDE 外观。我使用默认 KDE 的Oxygen主题,我的程序也是如此(注意带有标题的平滑渐变和聚焦小部件的蓝色选择);
  • 但是当使用 Qt5 重新编译而不对代码进行任何更改时,它使用了不同的样式(似乎被称为Fusion)并且看起来很尴尬且不合时宜(见右图)

Qt4 应用程序的原生外观不是 Qt5 应用程序的原生外观

我想要的是非常简洁:我希望我的应用程序适合周围的系统,即始终看起来是原生的。使用 Qt4 时,我习惯于默认使用它。Qt5 在 Windows 中似乎也有正常的原生外观。但是我该怎么做才能在 Kubuntu 中也有同样的功能呢?而且,理想情况下,无处不在?我的意思是,我不想强​​制我的应用程序的 linux 版本严格使用Oxygen。我希望它使用当前在 KDE 中设置的主题:就像在旧的 Qt4 中一样。

似乎应用程序代码与此问题无关:我没有在其中使用任何 QStyle,它非常典型的 Qt 的 hello-world。但以防万一它在 GitHub 上

UPD: @peppe已经就为什么会发生这个问题给出了非常充分的答案(KDE 中的氧气主题是针对 Qt4 编译的,并且不能被 Qt5 使用)。但是我仍在寻找有关如何解决此问题的答案?我试图找到 Oxygen 主题源来玩,但除了Firefox 主题之外什么也没找到。

UPD2: @kwirz提出了一个有趣的想法:强制应用使用 GTK+ 主题,并在 KDE 设置中启用oxygen-gtk,使 GTK 窗口看起来类似于 Oxygen。一方面,它确实看起来更接近氧气:

使用氧气-gtk 的 Qt5 应用程序的半原生外观

但另一方面,我们已经看到了细微的差别:只读行编辑变成灰色,焦点按钮仍然没有突出显示等。不幸的是,当尝试将此技术应用于更复杂的小部件时,会出现更多的伪影(尤其是在组合框上)和微调器):

在 QComboBox 和 QTimeEdit 上使用oxygen-gtk 的工件

因此,这种技术似乎不能成为一个完整的解决方案,但对于简单的情况仍然非常有用。

4

4 回答 4

15

Oxygen 是 KDE 的一部分,所以你可以在那里找到它。这不是一个独立的主题。您不能针对 Qt 5 构建 KDE,它不受支持。KDE 的下一个主要版本(KDE 5)将使用 Qt 5。

所以现在,你绝对无能为力。如果您希望您的应用程序在 KDE 4 中看起来和表现良好,请使用 Qt 4。

于 2013-02-17T10:42:10.770 回答
9

这不是你的应用程序——只是 Oxygen 是针对 Qt 4 而不是 Qt 5 编译的,所以 Qt 5 不能使用它并回退到默认样式(“fusion”)。请记住,样式实际上是插件——即代码,需要满足 API/ABI 要求才能加载和使用。您需要针对 Qt 5 编译的 Oxygen 样式。

于 2013-02-14T17:03:11.343 回答
4

try

QApplication::setStyle(QStyleFactory::create("GTK+"));

as workaround, it looks native, if oxygen-gtk is installed.

于 2013-04-12T07:09:31.973 回答
1

使用参数启动您的 Qt5 应用程序:

-style=gtk

据我所知,没有任何全局设置适用于所有 QT5 应用程序。

祝你好运!

于 2015-04-22T17:50:36.200 回答