Родной KDE ищет приложение Qt 5
Я установил Qt5 вместе с Qt4 на мою машину Kubuntu 12.10 linux и заметил следующее:
- Программа, скомпилированная с Qt4, имеет собственный внешний вид KDE. Я использую тему кислорода KDE по умолчанию, как и моя программа (обратите внимание на плавный градиент с заголовком и выделенным синим цветом выделенным виджетом);
- Но при перекомпиляции с Qt5 без каких-либо изменений в коде он использует другой стиль (кажется, что он называется Fusion) и выглядит неуклюжим и неуместным (см. Рисунок справа)
То, что я хочу, довольно смиренно: я хочу, чтобы мое приложение соответствовало окружающей системе, то есть всегда выглядело нативным. При использовании Qt4 я привык иметь это по умолчанию. Qt5 также, похоже, выглядит нормально в Windows. Но что я должен сделать, чтобы сделать то же самое в Kubuntu? И в идеале везде? Я имею в виду, я не хочу заставлять сборку Linux моего приложения строго использовать Oxygen. Я хочу, чтобы он использовал тему, которая в настоящее время установлена в KDE: точно так же, как это было в старом добром Qt4.
Похоже, что код приложения не имеет отношения к этой проблеме: я не играл ни с одним QStyle, это довольно типичный hello-мир Qt. Но на всякий случай это на GitHub.
UPD: @peppe дал достаточно убедительный ответ о том, почему возникает эта проблема (тема Oxygen в KDE скомпилирована для Qt4 и не может использоваться Qt5). Но я все еще ищу ответ о том, как это исправить? Я попытался найти источник темы Oxygen, чтобы поиграться, но не нашел ничего, кроме темы Firefox.
UPD2: @kwirz предложил интересную идею : заставьте приложение использовать тему GTK+ и включите oxygen-gtk в настройках KDE, что делает окна GTK похожими на Oxygen. С одной стороны, это действительно выглядит ближе к кислороду:
Но с другой стороны, мы уже видим небольшие различия: редактирование строки только для чтения становится серым, фокусированная кнопка все еще не подсвечена и т. Д. К сожалению, при попытке применить эту технику к более сложным виджетам появляются еще больше артефактов (особенно в поле со списком) и прядильщик):
Таким образом, кажется, что эта техника не может быть полным решением, но все же очень полезны простые случаи.
4 ответа
Кислород является частью KDE, и вот где вы его найдете. Это не отдельная тема. Вы не можете собрать KDE против Qt 5, это не поддерживается. Следующая основная версия KDE (KDE 5) будет использовать Qt 5.
Так что сейчас вы абсолютно ничего не можете сделать. Если вы хотите, чтобы ваше приложение хорошо выглядело и работало в KDE 4, используйте Qt 4.
Это не ваше приложение - просто Oxygen скомпилирован с Qt 4, а не с Qt 5, поэтому Qt 5 не может его использовать и возвращается к стилю по умолчанию ("fusion"). Помните, что стили на самом деле являются плагинами - то есть кодом, который должен быть загружен и использован в соответствии с требованиями API/ABI. Вам нужен стиль Oxygen, скомпилированный с Qt 5.
Пытаться
QApplication::setStyle(QStyleFactory::create("GTK+"));
В качестве обходного пути, он выглядит как родной, если на нем установлена кислородная система.
Запустите ваше приложение Qt5 с параметром:
-style=gtk
Я не знаю глобальных настроек, которые бы делали это для всех приложений QT5.
Удачи!