Pull to refresh

Comments 12

Да, хорошая идея!
Я бы был все же за явное перечитывание стилей, а не так, что случайно сохранил файлик — и приложение запестрело. Так что если делать такое, то это должна быть отключаемая возможность.
Это в любом случае отладочный механизм. Из продакшена лучше все это убирать.
В реализации фильтра ошибка, виляющая на всё приложение. Фильтруются все QEvent::KeyPress, даже если m_key != QKeySequence(keyEvent->key()).
Исправить можно примерно так:
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()));
В реализации фильтра ошибка, виляющая на всё приложение.
Да, согласен. Спасибо.

Добавление QFileSystemWatcher можно сделать описав его в заголовочном файле: QFileSystemWatcher watcher,
Создавать объекты в заголовочном файле нужно острожно. Каждое включение такого хедера в единицу трансляции создаст отдельный объект.
Каждое включение такого хедера в единицу трансляции создаст отдельный объект.

У нас включение этого заголовочника ожидается только в main.cpp, так что всё ок.
Если речь о цельном проекте — то конечно да, вообще без разницы где будет объявление. Но если вы даете исходники людям, вы им напишите — «включать только в main.cpp»? Никогда не встречал ничего подобного.

Можно просто создать этот объект в конструкторе StyleLoader. Или прямо в теле StyleLoader.cpp на худой конец.
Чтобы подключить инструмент к приложению, достаточно написать одну строчку где-нибудь в main()


Но если беспокоит чистота кода, то вот ещё утечка памяти:
StyleLoader * loader = new StyleLoader(qApp, filename, key);
Чтобы подключить инструмент к приложению, достаточно написать одну строчку где-нибудь в main()
Или где-нибудь еще, это ж очевидно :)

Но если беспокоит чистота кода, то вот ещё утечка памяти:
Поясните, где тут утечка. StyleLoader — это QObject. В конструктор базового класса мы передали родителя (qApp), который разрушит всех своих чайлдов, когда у него вызовут деструктор.
В конструктор базового класса мы передали родителя (qApp), который разрушит всех своих чайлдов, когда у него вызовут деструктор.

Согласен, эта часть корректна, утечки не будет.
EDIT: ответ к habrahabr.ru/post/232323/#comment_8307877
Sign up to leave a comment.

Articles

Change theme settings