Comments 12
А если использовать QFileSystemWatcher то можно обойтись даже без клавиш.
+6
Я когда-то делал встроенный в проект редактор QSS, выдирал его из Qt Creator'а =)
+1
В реализации фильтра ошибка, виляющая на всё приложение. Фильтруются все QEvent::KeyPress, даже если m_key != QKeySequence(keyEvent->key()).
Исправить можно примерно так:
Добавление QFileSystemWatcher можно сделать описав его в заголовочном файле: QFileSystemWatcher watcher, объявив
setAppStyleSheet как слот и добавив в конструктор код:
Исправить можно примерно так:
bool StyleLoader::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(m_key == QKeySequence(keyEvent->key()))
{
setAppStyleSheet();
return true;
}
}
return QObject::eventFilter(obj, event);
}
Добавление QFileSystemWatcher можно сделать описав его в заголовочном файле: QFileSystemWatcher watcher, объявив
setAppStyleSheet как слот и добавив в конструктор код:
watcher.addPath(filename);
connect(&watcher, SIGNAL(fileChanged(const QString&)), this, SLOT(setAppStyleSheet()));
0
В реализации фильтра ошибка, виляющая на всё приложение.Да, согласен. Спасибо.
Добавление QFileSystemWatcher можно сделать описав его в заголовочном файле: QFileSystemWatcher watcher,Создавать объекты в заголовочном файле нужно острожно. Каждое включение такого хедера в единицу трансляции создаст отдельный объект.
0
Каждое включение такого хедера в единицу трансляции создаст отдельный объект.
У нас включение этого заголовочника ожидается только в main.cpp, так что всё ок.
0
Если речь о цельном проекте — то конечно да, вообще без разницы где будет объявление. Но если вы даете исходники людям, вы им напишите — «включать только в main.cpp»? Никогда не встречал ничего подобного.
Можно просто создать этот объект в конструкторе StyleLoader. Или прямо в теле StyleLoader.cpp на худой конец.
Можно просто создать этот объект в конструкторе StyleLoader. Или прямо в теле StyleLoader.cpp на худой конец.
0
Чтобы подключить инструмент к приложению, достаточно написать одну строчку где-нибудь в main()
Но если беспокоит чистота кода, то вот ещё утечка памяти:
StyleLoader * loader = new StyleLoader(qApp, filename, key);
0
Чтобы подключить инструмент к приложению, достаточно написать одну строчку где-нибудь в main()Или где-нибудь еще, это ж очевидно :)
Но если беспокоит чистота кода, то вот ещё утечка памяти:Поясните, где тут утечка. StyleLoader — это QObject. В конструктор базового класса мы передали родителя (qApp), который разрушит всех своих чайлдов, когда у него вызовут деструктор.
0
В конструктор базового класса мы передали родителя (qApp), который разрушит всех своих чайлдов, когда у него вызовут деструктор.
Согласен, эта часть корректна, утечки не будет.
EDIT: ответ к habrahabr.ru/post/232323/#comment_8307877
0
Sign up to leave a comment.
Articles
Change theme settings
Отлаживаем Qt Style Sheet