Название: Как достучаться до инстанса производного класса QGuiApplication? Отправлено: xintrea от Февраль 20, 2018, 18:45 Для того, чтобы не таскать по всему приложению вытаскивание через extern глобальных объектов (всякие синглтоны с наборами конфигурирующих данных):
Код: extern GlobalParameters globalParameters; ... я решил сделать один объект (назовем его ядро) и все эти синглтоны поместить в него как включение. Но это решение все равно будет требовать extern ядра в тех файлах, где нужны данные: Код: extern Core core; Я решил сделать более правильно: надеясь на макрос qApp, я написал вот такой класс: Код: class App : public QGuiApplication И создаю приложение уже на основе такого класса: Код: App app(argc, argv); Я думал, что к объекту core смогу обращаться в любом месте программы вот так: Код: qApp->core Но нет, выяснилось, что макрос qApp возвращает тип QGuiApplication *, а у этого типа, естественно, нет поля core. Вопрос: каким методом можно таскать по всему Qt-коду ссылку на ядро (не передавая его во все методы), и не помещая ядро в глобальную область видимости с последующим extern? PS: qApp->instance тоже не помогает. Название: Re: Как достучаться до инстанса производного класса QGuiApplication? Отправлено: kambala от Февраль 20, 2018, 19:07 что мешает кастануть qApp к нужному типу?
Название: Re: Как достучаться до инстанса производного класса QGuiApplication? Отправлено: Alex Custov от Февраль 20, 2018, 22:43 Зачем использовать наследование от QGuiApplication, если в каждом TU где тебе нужно Core, ты всё равно должен будет включать хедер своего App (App.h)? Ты видимо хочешь чуда :) Использовать класс, не декларируя его :) Подключай хедер с декларацией Core (Core.h?) и сделай его классическим синглтоном тоже с геттером instance(), зачем ещё extern с глобальными переменными, что это за галимое Си?
Название: Re: Как достучаться до инстанса производного класса QGuiApplication? Отправлено: Igors от Февраль 21, 2018, 05:05 Зачем использовать наследование от QGuiApplication, если в каждом TU где тебе нужно Core, ты всё равно должен будет включать хедер своего App (App.h)? Ты видимо хочешь чуда :) Использовать класс, не декларируя его :) Подключай хедер с декларацией Core (Core.h?) и сделай его классическим синглтоном тоже с геттером instance(), зачем ещё extern с глобальными переменными, что это за галимое Си? Не согласен. Поместить globalParameters и др (возможно объединив в структуру Core) в свой App - смысл есть, эти данные смотрятся явно как члены наследника QGuiApp. Тогда зачем еще плодить синглтоны? Просто привести qAppКод
Название: Re: Как достучаться до инстанса производного класса QGuiApplication? Отправлено: Alex Custov от Февраль 21, 2018, 12:55 Тогда зачем еще плодить синглтоны? Просто привести qApp Код
Зачем плодить синглтоны, ведь нужно создать ещё один синглтон и вызывать его ? :D Сравним: Код
и Код
Для меня выбор очевиден Название: Re: Как достучаться до инстанса производного класса QGuiApplication? Отправлено: ViTech от Февраль 21, 2018, 13:18 Хозяйке на заметку: dynamic_cast - штука не бесплатная, это не static_cast.
|