Использование системной темы KDE в приложении Pure Qt

Я разрабатываю приложение Qt4 и запускаю его под gnome, но мне бы очень хотелось, чтобы оно использовало системную тему KDE (Oxygen) и цветовую схему (Obsidian Coast). К сожалению, приложение не реагирует на изменения в systemsettings.

По крайней мере, я могу заставить приложение использовать тему, которую я хочу, программно, установив QStyle:

QApplication app( argc, argv );
app.setStyle(QStyleFactory::create("oxygen"));

но я не знаю подобного подхода к настройке цветовой схемы, и это все равно некрасиво.

Интересно, что я уже разработал несколько приложений PyQt4 на этой же машине, и они прекрасно воспринимают изменения в systemsettings. Я не совсем уверен, почему приложение C++ Qt4 будет вести себя по-другому.

Еще одно замечание: я заметил, что изменение внешнего вида окна через диалоговое окно gnome повлияет на внешний вид моего окна C++ qt - так что, возможно, Gnome каким-то образом переопределяет мою конфигурацию KDE?


person TheNeuralBit    schedule 04.11.2013    source источник
comment
Это может лучше подойти для суперпользователя, если конфигурация неисправна. Лучше всего попробовать чистую виртуальную машину с установленным только KDE и посмотреть, работает ли она должным образом.   -  person rubenvb    schedule 04.11.2013
comment
Извините, я должен был добавить, что я запускал приложение на машине, работающей только с KDE, и оно реагирует на изменения конфигурации, как и ожидалось.   -  person TheNeuralBit    schedule 04.11.2013


Ответы (1)


Единственное решение, которое я нашел, это позволить среде сделать всю работу за вас, как указано здесь: https://forum.kde.org/viewtopic.php?f=17&t=90720

Фрагмент из сообщений:

Итак, вы хотите запустить Amarok с цветовой схемой, отличной от остальной части KDE? Вы можете сделать это, установив для него другой набор настроек.

Откройте Konsole и введите «export KDEHOME=$HOME/.kde4-amarok/». Затем запустите «systemsettings» и настройте внешний вид Amarok (цветовая схема и т. д.). Наконец, запустите «amarok», чтобы запустить сам Amarok.

Это будет работать и для приложений QT, но вы не можете установить стиль из приложения, как вы пытаетесь (app.setStyle(QStyleFactory::create("oxygen");). Вам придется использовать немного более беспорядочный метод:

sys.argv.append("--style=Oxygen")

Это будет читать аргумент из среды и не будет создавать совершенно новый экземпляр темы Oxygen (при условии, что вы установили среду KDEHOME где-то в своем проекте, и вы уже настроили ее), а затем будет использовать этот KDEHOME читать цвета и использовать тему Oxygen.

Может быть, они изменят это для QT5... (Возможность установить стиль программно)

person fernferret    schedule 08.01.2014
comment
Это сработало отлично, спасибо! за исключением того, что sys.argv.append не работает в C++ - person TheNeuralBit; 07.02.2014