[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