Russian Qt Forum

Программирование => С/C++ => Тема начата: leonopulos от Октябрь 30, 2014, 13:04



Название: РЕШЕНО: Ссылка на экземпляр класса QObject
Отправлено: 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, хотя название объекта указываю явно.
В чём может быть причина?


Название: Re: Ссылка на экземпляр класса QObject
Отправлено: Пантер от Октябрь 30, 2014, 13:07
Не совсем понял, но ты, походу, хочешь реализовать Синглтон (http://ru.wikipedia.org/wiki/%D0%9E%D0%B4%D0%B8%D0%BD%D0%BE%D1%87%D0%BA%D0%B0_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29)


Название: Re: Ссылка на экземпляр класса QObject
Отправлено: leonopulos от Октябрь 30, 2014, 13:23
Не совсем понял, но ты, походу, хочешь реализовать Синглтон (http://ru.wikipedia.org/wiki/%D0%9E%D0%B4%D0%B8%D0%BD%D0%BE%D1%87%D0%BA%D0%B0_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29)
Нет. я хочу из других классов приложения получить ссылку на конкретный объект и через неё получить доступ к его функциям и т.д.


Название: Re: Ссылка на экземпляр класса QObject
Отправлено: Igors от Октябрь 30, 2014, 13:47
Проверьте что в конструктор "MyApplication" подается указатель на действительно application. И зачем давать имя MyApplication если этот класс не наследует QApplication? Это капитально сбивает с толку


Название: Re: Ссылка на экземпляр класса QObject
Отправлено: vulko от Октябрь 30, 2014, 13:53
 return (static_cast<MyApplication *>(obj));

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

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


Название: Re: Ссылка на экземпляр класса QObject
Отправлено: leonopulos от Октябрь 30, 2014, 14:16
Спасибо всем.
Решил проблему.
В конструктор класса действительно не передавался предок.
Вернее, предок передавался (this), но надо было передавать корневого предка от QCoreApplication (qApp).
Исправил, все заработало.


Название: Re: Ссылка на экземпляр класса QObject
Отправлено: leonopulos от Октябрь 30, 2014, 14:20
return (static_cast<MyApplication *>(obj));

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

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

this нельзя. instance описана в классе, как static. она не видит внутренности конкретного экземпляра класса.
Ладно, уже все решил.
Спасибо.