LINUX.ORG.RU

Как достучаться до инстанса производного класса QGuiApplication? (qApp/qGuiApp не работают)

 , ,


0

1

Для того, чтобы не таскать по всему приложению вытаскивание через extern глобальных объектов (всякие синглтоны с наборами конфигурирующих данных):

extern GlobalParameters globalParameters;
extern FixedParameters fixedParameters;
extern AppConfig appConfig;

... я решил сделать один объект (назовем его ядро) и все эти синглтоны поместить в него как включение.

Но это решение все равно будет требовать extern ядра в тех файлах, где нужны данные:
extern Core core;

Я решил сделать более правильно: надеясь на макрос qApp, я написал вот такой класс:
class App : public QGuiApplication
{
public:
    App(int &argc, char **argv);

    Core core; // Дополнительное поле, содержит ядро
};

И создаю приложение уже на основе такого класса:
App app(argc, argv);

Я думал, что к объекту core смогу обращаться в любом месте программы вот так:
qApp->core

Но нет, выяснилось, что макрос qApp возвращает тип QGuiApplication *, а у этого типа, естественно, нет поля core.

Вопрос: каким методом можно таскать по всему Qt-коду ссылку на ядро (не передавая его во все методы), и не помещая ядро в глобальную область видимости с последующим extern?

★★★★★
Ответ на: комментарий от anonymous

Благодарю, затупил.

Потом можно сделать макрос

#define appCore static_cast<App*>(qApp)->core

чтоб было красиво.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Лучше так не делать на самом деле, а руками передавать в соответствующие места нужный экземпляр Core.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.