2010-04-20 43 views
1

我想创建一个自定义QGraphicsItem按钮,如Fred here所示。他发布的代码可以找到here自定义QGraphicsItems不编译,并给出“对象是私人”的错误

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

  • /usr/include/qt4/QtGui/qgraphicsitem.h “的QGraphicsItem ::的QGraphicsItem(常量 的QGraphicsItem & )”是私人
  • /usr/include/qt4/QtCore/qobject.h
    '的QObject :: QObject的(常量的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找到。

任何想法是什么错?提前致谢。

+0

我得到一个不同的错误 - “button.h:31:错误:未定义的接口”。我正在使用Qt 4.5.2。它需要4.6吗? – Troubadour 2010-04-20 21:21:14

+0

@Troubadour,我正在使用v4.5.0和第二个示例,正如我指出的那样。所以它应该在v4.5.2上运行。当然,鉴于我得到这个错误,不知道我是否应该就此提供建议。 :) – bahree 2010-04-20 22:08:59

+0

谢谢。另一个样本,以及来自同一地点的其他样本,对我来说都很好。也许Qt版本的差异是导致不同错误的原因。恐怕我不知道为什么会出现任何错误,尽管如果你在第31行删除了Q_INTERFACES宏,那么这个例子的编译效果会很好。不管这是个好主意还是当然不是; ... – Troubadour 2010-04-21 18:38:31

回答

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 
+0

嗨,对不起,我没有早点回来。添加Q_DISABLE_COPY并没有解决这个问题;正如我上面所说的删除Q_INTERFACES宏修复了它。或者看起来如此。 :) – bahree 2010-04-22 14:56:21

相关问题