Russian Qt Forum

Qt => Общие вопросы => Тема начата: dr_Begemot от Апрель 23, 2009, 16:46



Название: Как унаследовать класс от QObject?
Отправлено: dr_Begemot от Апрель 23, 2009, 16:46
Как унаследовать класс от QObject?
Видимо я что-то не сделал, т.к. компилятор пишет: error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'

вот класс:
Код:
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass();
           //...
};


Название: Re: Как унаследовать класс от QObject?
Отправлено: alex12 от Апрель 23, 2009, 16:51
QObject::QObject() закрытый, а QObject::QObject( QObject *parent=0 ) открытый конструктор.

Код
C++ (Qt)
class MyClass : public QObject
{
 Q_OBJECT
public:
 MyClass( QObject *parent = 0 );
 //...
};
 
...
 
MyClass::MyClass(  QObject *parent )
 : QObject( parent )
{
}
 


Название: Re: Как унаследовать класс от QObject?
Отправлено: lit-uriy от Апрель 23, 2009, 20:31
>>Видимо я что-то не сделал,

2 dr_Begemot, ты видимо в реализации конструктора пишешь так:
MyClass::MyClass( )  : QObject()
тогда можешь написать так:
MyClass::MyClass( )  : QObject(0)

Объяснение тебе уже написали, и пример более правильный:
>>QObject::QObject() закрытый


Название: Re: Как унаследовать класс от QObject?
Отправлено: dr_Begemot от Апрель 24, 2009, 08:34
Переделал так:

Код:
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass( QObject *parent = 0 );
           //...
};

в реализации:
Код:
MyClass::MyClass(QObject *parent) : QObject(parent){
//...
}

все равно та же ошибка :(


Название: Re: Как унаследовать класс от QObject?
Отправлено: Steven_Orko от Апрель 24, 2009, 08:58
Тогда приведи содержимое файла полностью, ат акже и весь вывод ошибки (+-10 строк от той, что указывает на использование закрытого метода).


Название: Re: Как унаследовать класс от QObject?
Отправлено: dr_Begemot от Апрель 24, 2009, 09:14
Тогда приведи содержимое файла полностью, ат акже и весь вывод ошибки (+-10 строк от той, что указывает на использование закрытого метода).

Решил проблему.

Надо было добавить такую строчку в класс
private:
   Q_DISABLE_COPY(MyClass)


Название: Re: Как унаследовать класс от QObject?
Отправлено: alex12 от Апрель 24, 2009, 15:17
Цитировать
Q_DISABLE_COPY(MyClass)

Странно... У меня собрался просто так: ( MinGW Qt4.5.0 )

Код
C++ (Qt)
#ifndef __MY__
#define __MY__
 
#include <QtGui>
 
class MyClass : public QObject
{
 Q_OBJECT
public:
 MyClass( QObject *parent = 0 );
};
#endif
 
Код
C++ (Qt)
#include <QtGui>
 
#include "main.h"
 
MyClass::MyClass(  QObject *parent )
 : QObject( parent )
{
}
 
int main( int argc, char **argv )
{
 MyClass myclass;
}
 


Название: Re: Как унаследовать класс от QObject?
Отправлено: ритт от Апрель 26, 2009, 02:24
а при чём тут Q_DISABLE_COPY(MyClass) ?
и вопрос на засыпку - что делает и для чего предназначен макрос Q_DISABLE_COPY ?)


Название: Re: Как унаследовать класс от QObject?
Отправлено: spbtellurian от Июнь 08, 2009, 11:22
что делает и для чего предназначен макрос Q_DISABLE_COPY ?)

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0


Название: Re: Как унаследовать класс от QObject?
Отправлено: spirit от Июнь 08, 2009, 11:25
что делает и для чего предназначен макрос Q_DISABLE_COPY ?)

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0
это был риторический вопрос к автору  ;)


Название: Re: Как унаследовать класс от QObject?
Отправлено: ритт от Июнь 08, 2009, 11:26
что делает и для чего предназначен макрос Q_DISABLE_COPY ?)

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0
запрещает сАздОвать больше одного экземпляра? каким же это образом? блокирует вызов new? %)


Название: Re: Как унаследовать класс от QObject?
Отправлено: spirit от Июнь 08, 2009, 11:33
запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0

к тому же
Цитировать
Q_DISABLE_COPY ( Class )

Disables the use of copy constructors and assignment operators for the given Class.
или код макроса глянь.


Название: Re: Как унаследовать класс от QObject?
Отправлено: BRE от Июнь 08, 2009, 11:34
или код макроса глянь.
Даже в assistant'е все расписано с примерами.  :)


Название: Re: Как унаследовать класс от QObject?
Отправлено: Alex Custov от Июнь 08, 2009, 11:46
что делает и для чего предназначен макрос Q_DISABLE_COPY ?)

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0

это ты с умными синглетонами перепутал :)


Название: Re: Как унаследовать класс от QObject?
Отправлено: ритт от Июнь 08, 2009, 13:37
кстати (но не в тему), возможно, в 4.6 появится QSingleton :)