Пользовательские QGraphicsItems не компилируются и выдают ошибку «объект является частным» - PullRequest
1 голос
/ 21 апреля 2010

Я пытаюсь создать кнопку Custom QGraphicsItem, как показано Фредом здесь . Код, который он разместил, можно найти здесь .

Проблема в том, что когда я пытаюсь скомпилировать код, я получаю две следующие ошибки:

  • / USR / включать / qt4 / QtGui / qgraphicsitem.h «QGraphicsItem :: QGraphicsItem (Const QGraphicsItem &) ’является приватным
  • / USR / включать / qt4 / QtCore / qobject.h
    ‘QObject :: QObject (const QObject &)’ является частный

Вот фрагмент кода, который по сути такой же, как в приведенном выше примере. Ошибка в замедлении класса.

class MyButton : public QObject, public QGraphicsItem
{
 Q_OBJECT
 Q_INTERFACES(QGraphicsItem)

public:
 MyButton(QGraphicsItem *parent = 0);
 MyButton(const QString normal, const QString pressed = "", QGraphicsItem *parent = 0);
....
}

Интересно, что другой пример, показанный здесь , работает нормально. Пример кода для этого можно найти здесь .

Есть идеи, что не так? Заранее спасибо.

1 Ответ

1 голос
/ 21 апреля 2010

Эти ошибки выглядят как попытка скопировать объект кнопки. Компилятор пытается сгенерировать конструктор копирования MyButton автоматически и завершается неудачно, потому что конструктор копирования QObject (который является вашей базой кнопок) является закрытым. Помимо перечисленных вами ошибок, вы также должны увидеть такие вещи, как:

note: synthesized method 'MyButton::MyButton(const MyButton&)' first required here

с именем исходного файла и номером строки после этого сообщения. Если вы не видите это сообщение, попробуйте добавить:

private:
    Q_DISABLE_COPY(MyButton)

к определению класса MyButton. Тогда вы должны увидеть это:

error: 'MyButton::MyButton(const MyButton&)' is private within this context
...