2016-09-13 4 views
1

Я пишу инструменты PySide, которые работают в других сторонних приложениях. Один и тот же инструмент запускается в нескольких приложениях и должен последовательно формироваться в них. Проблема в том, что эти приложения иногда используют сами QT и имеют свой собственный стиль, используя предположительно QPalette. Когда мои инструменты родительского основного приложения, они берут на себя основные стили приложений.Qt Cross Styling Issues

Итак, я попытался решить эту проблему, используя свой собственный QPalette и установив свой главный инструмент \ widget моих инструментов, чтобы использовать его, однако это не влияет на детей виджетов, и они по-прежнему предполагают стиль из основного приложения (не уверен, что это правильное поведение).

Итак, я начал использовать таблицу стилей, чтобы настроить весь внешний вид, и в значительной степени это работает. Однако он все еще не согласован между приложениями. Поэтому либо я недостаточно переопределяю параметры таблицы стилей, либо некоторые вещи, которые я не могу исправить, используя только таблицу стилей. Example of same style sheet in Nuke and 3ds Max

Очень простая таблица стилей я использовал в тесте:

QWidget { 
    margin: 0px; 
    padding: 0px; 
    spacing: 0px; 
    color:white; 
} 

Моих Concise вопросов:

  1. Можно ли полностью переопределить внешний вид заданный QPalette, используя таблицу стилей в одиночку?
  2. Если это так и актуально здесь, что мне не хватает, расстояние \ размер разные. Оба окна имеют минимальный размер. Я не могу думать о том, что будет с этим делать.

примечание: Я знаю, что я не перезаписал таблицу стилей QGroupbox, и даже при этом не получается такой же результат. Я также попытался использовать em, px и ex. PySide версия 1.0.9 в nuke и 1.2.2 в макс, если это имеет значение, и я думаю, это, вероятно, возможно.

ответ

1

К сожалению, из-за исторических причин Qt предлагает слишком много способов обмануть одного и того же кота, когда дело доходит до стиля виджета, а таблицы стилей не влияют на макеты. Таким образом, вы не можете полностью описать стиль приложения, используя только QSS, и, если вы не будете осторожны в своем дизайне, вы в конечном итоге будете стилизовывать вещи разными способами, особенно если ваш код имеет много истории. Это будет в случае с инструментом, для которого вы создаете свой плагин.

Прежде всего, вы поняли, что последовательный стиль - это действительно интерфейс, к которому должны прибегать все компоненты. Если этот интерфейс не указан в документации разработчика плагинов для приложения-хоста плагина, он будет уродливым и ненужным.

Лучшее, что вы можете сделать, это перебрать другие виджеты приложения и обнюхивать их паллеты, расположить макеты и т. Д. Вам в основном придется взломать его в рабочую форму и надеяться, что следующая версия хост-приложения не будет " t сломать его. Поскольку они ничего не указывают в этом отношении, им самим нечего протестовать против или развиваться, поэтому ожидание в том, что да, оно сломается, и да, это будет уродливо. Это то, что вы получаете, когда спецификация интерфейса игнорируется.

+0

Благодарим вас, его хорошо знать., Спасает меня, теряя время, пытаясь добиться невозможного с помощью таблицы стилей. Мне, возможно, придется найти способ сделать таблицу стилей легко регулируемой для разных приложений. –

+0

@Kuba Ober Что является лучшим источником обучения qt для начинающих? –

+0

Пример кода и документации. Убедитесь, что вы можете открыть любой из примеров Qt и построить его.Затем легко экспериментировать, менять вещи и т. Д. Также привыкнуть к системе управления версиями, например. git с графическим интерфейсом smartgit. Получите привычку добавлять весь код, который вы работаете в репозиторий, чтобы вы могли легко отслеживать свои изменения. –