LINUX.ORG.RU

qt наследование от QGraphicsRectItem

 , ,


0

1

Пытаюсь создать свой класс на основе QGraphicsRectItem

#ifndef CCITY_H
#define CCITY_H

#include <QGraphicsRectItem>
#include <QString>

class CCity :public QGraphicsRectItem
{
private:
    CCity();



    CCity(QString coords, QString name);

public:

    int x,y;

    QString name, temp;
};

#endif // CCITY_H


На что компилятор ругается:

error: QGraphicsRectItem::QGraphicsRectItem(const QGraphicsRectItem&)' is private

error: within this context

Прошу прощения за глупый вопрос, но что я не так делаю?


вызываешь приватный конструктор копирования

не выкладываешь весь код и лог компилятора

к.о.

x0r ★★★★★
()

Как пить дать, копируешь QObject.

KblCb ★★★★★
()

Ты не перепутал private и public местами?

anonymous
()
Ответ на: комментарий от x0r

Так код именно этот и сбоит, т.е. создание класса на основании другого. Объекты еще не создаются, сбоить там нечему.

А как мне не вызывать приватный конструктор? Попробовал изменить код на

public:
    CCity();
    CCity(QString coords, QString name);
Ничего не поменялось

gwyllum
() автор топика
Ответ на: комментарий от gwyllum

Вот этот код в классе QGraphicsRectItem вызывает ошибку. А что в моем нужно править - непонятно.

private:
    Q_DISABLE_COPY(QGraphicsRectItem)
    Q_DECLARE_PRIVATE(QGraphicsRectItem)

gwyllum
() автор топика

Вроде каждый класс, наследуемый от QObject, должен включать макрос Q_OBJECT, не?

anonymous
()

Кстати, не забудь прописать Type для переопределяемых классов. Иначе qgraphicsitem_cast будет работать некорректно.

class CCity :public QGraphicsRectItem
{
public:
    enum { Type = UserType + 1 };
    CCity();
    CCity(QString coords, QString name);

    virtual int type () const { return Type; }

private:
    int x,y;

    QString name, temp;
};


grondek
()
Ответ на: комментарий от no-such-file

Сорри, я не заметил вот эту строчку и не закомментировал ее

listCity<<CCity(query.value(1).toString(), query.value(0).toString())

Изменил ее на

         CCity *city=new CCity(query.value(1).toString(), query.value(0).toString());

        listCity<<city;
Теперь мне выдается ошибка

error: no match for 'operator<<' in '((Dialog*)this)->Dialog::listCity << city

listCity - QList настроенный на CCity. Не могу понять, почему оператор перестал работать.

gwyllum
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.