Я установил Qt5 вместе с Qt4 на свою машину Kubuntu 12.10 linux и заметил следующее:
- Программа, скомпилированная с Qt4, имеет собственный внешний вид KDE. Я использую тему KDE Oxygen по умолчанию, и моя программа (обратите внимание на плавный градиент с заголовком и синим выбором сфокусированного виджета);
- Но при перекомпиляции с Qt5 без каких-либо изменений в коде он использует другой стиль (похоже, он называется Fusion), и он выглядит неудобно и неуместно (см. правую ссылку)
То, что я хочу, довольно просто: я хочу, чтобы мое приложение соответствовало окружающей системе, т.е. всегда выглядело родным. При использовании Qt4 я использую это по умолчанию. Qt5 также, казалось, имел обычный внешний вид в Windows. Но что я должен сделать, чтобы иметь то же самое в Kubuntu? И, в идеале, везде? Я имею в виду, я не хочу заставлять linux-сборку моего приложения строго использовать Oxygen. Я хочу, чтобы он использовал тему, которая в настоящее время установлена в KDE: точно так же, как в старом Qt4.
Кажется, что код приложения не имеет отношения к этой проблеме: я не играл с QStyle в нем, это довольно типичный Qt hello-world. Но на всякий случай это на GitHub.
UPD: @peppe дал довольно достаточный ответ о том, почему эта проблема возникает (тема Oxygen в KDE компилируется против Qt4 и не используется по Qt5). Но я все еще ищу ответ о том, как это исправить? Я пытался найти источник темы Oxygen для игры, но ничего не нашел, кроме тема Firefox.
UPD2: @kwirz предложил интересную идею: заставить приложение использовать тему GTK + и включить кислород-gtk в настройках KDE, которые делают окна GTK похожими на Oxygen. С одной стороны, он действительно выглядит ближе к кислороду:
Но с другой стороны, мы уже видим небольшие отличия: readonly line edit становится серым, сфокусированная кнопка все еще не освещена и т.д. К сожалению, при попытке применить эту технику к более сложным виджетам появляется еще больше артефактов (особенно на поле со списком и счетчиком):
Итак, похоже, что эта техника не может быть полным решением, но все же очень полезны простые случаи.