Russian Qt Forum
Апрель 20, 2024, 15:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: РЕШЕНО: Ссылка на экземпляр класса QObject  (Прочитано 3778 раз)
leonopulos
Гость
« : Октябрь 30, 2014, 13:04 »

Здравствуйте, друзья.
Пытаюсь написать аналог функции QCoreApplication::instance но для QObject. То есть хочу получить ссылку на экземпляр класса.
Код:
//MyApplication.h
class MyApplication : public QObject
{
    Q_OBJECT
public:
    MyApplication(QObject *parent = 0);
    ~MyApplication();
    static MyApplication *instance();
 // ...
};
//MyApplication.cpp
MyApplication::MyApplication(QObject *parent)
    : QObject(parent)
{
  // ...
    this->setObjectName("MyApplication");
 // ...
}

MyApplication *MyApplication::instance()
{
    QObject *obj = QCoreApplication::instance()->findChild<QObject*>("MyApplication");
    return (static_cast<MyApplication *>(obj));
}

Но объект почему-то не находится, возвращается ссылка на NULL, хотя название объекта указываю явно.
В чём может быть причина?
« Последнее редактирование: Октябрь 30, 2014, 14:22 от leonopulos » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 30, 2014, 13:07 »

Не совсем понял, но ты, походу, хочешь реализовать Синглтон
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
leonopulos
Гость
« Ответ #2 : Октябрь 30, 2014, 13:23 »

Не совсем понял, но ты, походу, хочешь реализовать Синглтон
Нет. я хочу из других классов приложения получить ссылку на конкретный объект и через неё получить доступ к его функциям и т.д.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Октябрь 30, 2014, 13:47 »

Проверьте что в конструктор "MyApplication" подается указатель на действительно application. И зачем давать имя MyApplication если этот класс не наследует QApplication? Это капитально сбивает с толку
Записан
vulko
Гость
« Ответ #4 : Октябрь 30, 2014, 13:53 »

 return (static_cast<MyApplication *>(obj));

так нельзя. qobject_cast как минимум.

А вообще странный гемор какой-то.
Почему бы в instance не делать return this?
Записан
leonopulos
Гость
« Ответ #5 : Октябрь 30, 2014, 14:16 »

Спасибо всем.
Решил проблему.
В конструктор класса действительно не передавался предок.
Вернее, предок передавался (this), но надо было передавать корневого предка от QCoreApplication (qApp).
Исправил, все заработало.
Записан
leonopulos
Гость
« Ответ #6 : Октябрь 30, 2014, 14:20 »

return (static_cast<MyApplication *>(obj));

так нельзя. qobject_cast как минимум.

А вообще странный гемор какой-то.
Почему бы в instance не делать return this?

this нельзя. instance описана в классе, как static. она не видит внутренности конкретного экземпляра класса.
Ладно, уже все решил.
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 22.