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 ()

но что я не так делаю?

Ты где-то передаёшь CCity по значению.

no-such-file ★★★★★ ()

Вроде каждый класс, наследуемый от 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 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.