0.2
Описание
Аддон предназначен заменить стандартные методы задания стилей для элементов приложения, а так же убрать стили из кода приложения вообще.
Когда проектировал аддон оталкивался от того с чем сам сталкнулся во время разработки PQStudio.
Так как студия разделена на отдельные компоненты и есть загрузчик компонентов, то описывать в каждом классе стили не удобно. Так же как и если их хранить полностью в отдельном файле который при инициализации приложения попадает в Storage.
По этому написал аддон который реализует хранение стилей и удобное задаение стиля приложению или его более маленьким компанентам, таким как кастомные кнопки и тд.
Так как по моей задумке PQStudio будет иметь как минимум две темы оформления, то было решено что в указанной директории будут находится директории в которых уже будут находится файлы со стилями.
Сами файлы стилей имею расширение .qss
При инициализации аддона он сканирует директорию на наличие вложенных директорий, названия этих деректорий будут служить названием для темы оформления или в простонароде skin.
Вложенные директории сканируеются на наличие файлов qss.
Внимание!
Аддон получит информацию только из файлов qss все остальные файлы и директории будут проигнорированны
Дочерний каталог должен выглядеть следующим образом:
- Code:
/** * AppDir - Директория приложения * |---ChildDir - Дочерний каталог в котором расположены все темы приложения * |---ThemeName1 * | |---FileName1.qss * | |---FileName2.qss * | * |---ThemeName2 * |---FileName1.qss * |---FileName2.qss */
Для корректной работы необходимо расширение для движка PQEngineFS
Использование
Необходимо инициализирвоать аддон передав ему одним единственным аргументов название дочернего каталога приложения в котором будут находится все skins приложения и задать skin который будет использоваться:
- Code:
new Style('Themes'); Style::setTheme('ThemeName1'); /** or */ $style = new Style('Themes'); $style->setTheme('ThemeName1');
- Code:
$label = new QLabel($this); $label->styleSheet = Style::get('FileName'); /** or */ $label = new QLabel($this); Style::set($label, 'FileName');
Будет возвращен массив содержащий все названия всех доступных тем
- Code:
$skins = $style->getThemesList(); /** or */ $skins = Style::getThemesList();
Код приложения:
- Code:
new Style('Themes'); Style::setTheme('Dark'); class MainWindow extends QWidget { public function __construct() { parent::__construct(); Style::set($this, 'Main'); $this->initComponents(); } } $mainWindow = new MainWindow; $mainWindow->show();
Который находится в директории Dark
- Code:
QWidget { background: #7ad177; }
Добавлены методы:
- setSkin('ThemeName') - Алиас метода setTheme()
- getSkinsList() - Алиас метода getThemesList()
- about('ThemeName') - Метод возвращает информацию из файла about.json, который должен находится в директории темы. Если был передан аргумент, то возвратит информация по названию темы. Иначе возвратит информацию о теме заданной через метод setTheme() или setSkin(). Если у темы не было файла about.json то возвратит пустой массив
- aboutAll() - Метод возвратит массив информации о всех темах у которых был файл about.json
Так как темы находятся в директории приложения и могут быть изменены пользователем, то было решено сделать возможность хранить дефолтовые темы в ресурсах. При инициализации аддона он проверяет наличие файла styleSheet.json в директории ресурсов название которой полностью соответствует названию диреткории тем.
Структура файла styleSheet.json
- Code:
{ "ThemeName1" : [ "FileName1", "FileName2" ], "ThemeName2" : [ "FileName1", "FileName2" ] }
При инициализации аддон проверит существуют ли файлы в директории приложения, если файлов нет то он их скопирует из ресурсов. Если файлы существуют, то он проверит их контрольные суммы и при не соответствии перезапишет только те файлы которые были изменены, файлами из ресурсов.
Архив
Style_0.2.7z
Архив необходимо скачать и распаковать в директорию addons установленной программы PQBuilder
Пример пути куда необходимо распаковывать архив:
C:\Program FIles (x86)\PQBuilder\addons