自定义QGraphicsItems不编译并给出“对象是私有”错误

时间:2010-04-20 21:10:29

标签: c++ qt4 qgraphicsview qgraphicsitem

我正在尝试创建一个自定义QGraphicsItem按钮,如Fred here所示。他发布的代码可以找到here

问题是当我尝试编译代码时,我得到以下两个错误:

  • /usr/include/qt4/QtGui/qgraphicsitem.h “的QGraphicsItem ::的QGraphicsItem(常量 QGraphicsItem&)'是私人的
  • /usr/include/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);
....
}

有趣的是,显示here的其他示例工作正常。可以找到here的示例代码。

知道出了什么问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

这些错误看起来像是试图复制按钮对象。编译器尝试自动生成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