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