Подтвердить что ты не робот

Собственный KDE ищет приложение Qt 5

Я установил Qt5 вместе с Qt4 на свою машину Kubuntu 12.10 linux и заметил следующее:

  • Программа, скомпилированная с Qt4, имеет собственный внешний вид KDE. Я использую тему KDE Oxygen по умолчанию, и моя программа (обратите внимание на плавный градиент с заголовком и синим выбором сфокусированного виджета);
  • Но при перекомпиляции с Qt5 без каких-либо изменений в коде он использует другой стиль (похоже, он называется Fusion), и он выглядит неудобно и неуместно (см. правую ссылку)

Native look of Qt4 appNOT native look of Qt5 app

То, что я хочу, довольно просто: я хочу, чтобы мое приложение соответствовало окружающей системе, т.е. всегда выглядело родным. При использовании 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. С одной стороны, он действительно выглядит ближе к кислороду:

Semi-native look of Qt5 app using oxygen-gtk

Но с другой стороны, мы уже видим небольшие отличия: readonly line edit становится серым, сфокусированная кнопка все еще не освещена и т.д. К сожалению, при попытке применить эту технику к более сложным виджетам появляется еще больше артефактов (особенно на поле со списком и счетчиком):

Artifacts on QComboBox and QTimeEdit using oxygen-gtk

Итак, похоже, что эта техника не может быть полным решением, но все же очень полезны простые случаи.

4b9b3361

Ответ 1

Кислород является частью KDE, так что там, где вы его находите. Это не отдельная тема. Вы не можете построить KDE против Qt 5, он не поддерживается. Следующая основная версия KDE (KDE 5) будет использовать Qt 5.

Итак, теперь вы абсолютно ничего не можете сделать. Если вы хотите, чтобы ваше приложение выглядело и выглядело красиво в KDE 4, используйте Qt 4.

Ответ 2

Это не ваше приложение - это просто, что Oxygen скомпилирован против Qt 4, а не Qt 5, поэтому Qt 5 не может использовать его и возвращается к стилю по умолчанию ( "fusion" ). Помните, что стили на самом деле плагины - то есть код, подчиненный требованиям API/ABI для загрузки и использования. Вам нужен стиль кислорода, составленный против Qt 5.

Ответ 3

попробовать

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

как обходной путь, он выглядит естественным, если установлен кислород-gtk.

Ответ 4

Запустите приложение Qt5 с параметром:

-style=gtk

Не существует глобальной настройки, о которой я знаю, что делает это для всех приложений QT5.

Удачи!