Отлаживаем Qt Style Sheet
Популярный фреймворк Qt имеет очень удобный механизм управления стилями UI — Qt Style Sheet. Благодаря которому стиль виджетов и окон можно задать в CSS-подобной форме. Стиль может храниться как в ресурсах приложения так и во внешенем файле.В своей практике постоянно сталкивался с задачей отладить файл стиля в реальном проекте. Если для веб-приложений достаточно нажать F5 в браузере, то на десктопе придется перезапускать приложение, иногда авторизовываться, добираться до нужной формы. Это большая потеря времени. Попробуем сделать инструмент для удобной отладки стилей. Сформулирую пользовательский сценарий: Хотим править файл стиля и сразу смотреть как это выглядит в любой форме приложения.
Приступая к реализации, будем считать, что пользователя устроит вариант — сохранить файл стиля — нажать кнопку обновления в приложении. Реализация будет опираться на механизм перехвата событий приложения (eventFilter). При старте приложения установим перехватчик событий, который будет перезагружать файл стиля при нажатии заданной клавиши.
Немного кода:
Описание класса. StyleLoader.h #ifndef STYLELOADER_H #define STYLELOADER_H
#include
bool eventFilter (QObject *obj, QEvent *event); private: StyleLoader (QObject * parent, const QString& filename, const QKeySequence& key); void setAppStyleSheet (); static QString defaultStyleFile (); QString m_filename; QKeySequence m_key;
};
#endif // STYLELOADER_H
и реализация:
#include «StyleLoader.h»
#include
void StyleLoader: attach (const QString &filename, QKeySequence key) { StyleLoader * loader = new StyleLoader (qApp, filename, key); qApp→installEventFilter (loader); loader→setAppStyleSheet (); }
bool StyleLoader: eventFilter (QObject *obj, QEvent *event)
{
if (event→type () == QEvent: KeyPress)
{
QKeyEvent *keyEvent = static_cast
void StyleLoader: setAppStyleSheet () { QFile file (m_filename); if (! file.open (QIODevice: ReadOnly)) { qDebug () << "Cannot open stylesheet file " << m_filename; return; } QString stylesheet = QString::fromUtf8(file.readAll()); qApp->setStyleSheet (stylesheet); }
QString StyleLoader: defaultStyleFile () { return QApplication: applicationDirPath () + »/style.qss»; }
StyleLoader: StyleLoader (QObject *parent, const QString& filename, const QKeySequence &key): QObject (parent), m_filename (filename), m_key (key) {
} Чтобы подключить инструмент к приложению, достаточно написать одну строчку где-нибудь в main ():
StyleLoader: attach (); В таком варианте будут использоваться настройки по-умолчанию: файл стиля: Папка_с_исполняемым файлом/style.qssКлавиша для обновления: F5.Можно задать собственные значения:
StyleLoader: attach («c:/myStyle.qss», QKeySequence («F6»)); Теперь мы можем запустить наше приложение, в любой момент подправить файл стиля, нажать F5 и сразу же увидеть как это будет выглядеть.
PS: код компактный, поэтому рекомендую просто стащить себе в проект. Вскоре выложу на Github под свободной лицензией.