[Qt-interest] Nested Custom Types

Thomas Ehrnhoefer thomas.ehrnhoefer at tasktop.com
Fri Apr 1 17:07:31 CEST 2011


Hi

I am new to Qt and am currently in the process of working on the model of my
application. Since I want to take advantage of the MetaObjectModel (need to
generically (un)marshall data to objects), I am studying and using the
documentation available on this.
However I am running into compiler issues with nested custom types (see end
of email for sample code).

The error I am getting is when compiling the custom type which has another
custom type as member, and the output is something like:

[some].h(34) : error C2248: 'QObject::operator =' : cannot access private
member declared in class 'QObject'
This diagnostic occurred in the compiler generated function '[some]
&[some]::operator =(const [some] &)'

Any input would be very much appreciated, thanks!

Thomas

P.S.:
Here is a simple example of what me code looks like. There is a simple
Person object, and a Container object with a person as member:

===== person.h =====
#ifndef PERSON_H
#define PERSON_H
#include <QObject>
#include <QMetaType>

class Person : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString _name READ name WRITE setName)

public:
    Person();
    Person(const Person &other);
    Person(QObject *parent);
    ~Person();
public slots:
    QString name() const;
    void setName(QString name);
private:
    QString _name;
};
Q_DECLARE_METATYPE(Person);
#endif // PERSON_H



===== person.cpp =====
#include "person.h"

Person::Person() {}

Person::Person(const Person &other) { _name = other._name; }

Person::Person(QObject *parent) : QObject(parent){}

Person::~Person(){}

QString Person::name() const { return _name; }

void Person::setName(QString name) { _name = name; }



===== container.h =====
#ifndef CONTAINER_H
#define CONTAINER_H
#include <QObject>
#include <QMetaType>

class Container : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString _summary READ summary WRITE setSummary)
    Q_PROPERTY(Person _owner READ owner WRITE setOwner)
public:
    Container();
    Container(const Container &other);
    Container(QObject *parent);
    ~Container();
public slots:
    QString summary() const;
    Person owner() const;
    void setOwner(Person owner);
    void setSummary(QString summary);
private:
    QString _summary;
    Person _owner;
};

Q_DECLARE_METATYPE(Container);
#endif // CONTAINER_H



===== container.cpp =====

#include "container.h"

Container::Container()
{
}

Container::Container(const Container &other) :
    _owner(other._owner())
{
    _summary = other._summary;
}

Container::Container(QObject *parent) : QObject(parent) {}

Container::~Container() {}

QString Container::summary() const { return _summary; }

Person TaskHandle::owner() const { return _owner; }

void Container::setSummary(QString summary) { _summary = summary; }

void TaskHandle::setOwner(Person owner) { _owner = owner; }



-- 
Thomas Ehrnhoefer
Software Developer, http://tasktop.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20110401/b6cc6fbd/attachment.html 


More information about the Qt-interest-old mailing list