【问题标题】:Custom QGraphicsItems not compiling and gives "object is private" error自定义 QGraphicsItems 未编译并给出“对象是私有的”错误
【发布时间】:2011-02-10 08:12:59
【问题描述】:

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

问题是当我尝试编译代码时出现以下两个错误:

  • /usr/include/qt4/QtGui/qgraphicsitem.h 'QGraphicsItem::QGraphicsItem(const QGraphicsItem&)' 是私有的
  • /usr/include/qt4/QtCore/qobject.h
    'QObject::QObject(const QObject&)' 是 私人的

这里是代码 sn-p,它与上面的示例基本相同。错误在于类减速。

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找到示例代码。

知道有什么问题吗?提前致谢。

【问题讨论】:

  • 我得到一个不同的错误 - “button.h:31: Error: Undefined interface”。我正在使用 Qt 4.5.2。它需要 4.6 吗?
  • @Troubadour,我使用的是 v4.5.0 和我指出的第二个示例。所以它应该适用于 v4.5.2。当然,鉴于我收到此错误,不确定我是否应该就此提出建议。 :)
  • 谢谢。另一个样本,实际上是来自同一个地方的其他样本,对我来说都很好。也许 Qt 版本差异是导致不同错误的原因。恐怕我不知道为什么会发生这两个错误,尽管如果您在第 31 行删除 Q_INTERFACES 宏,该示例确实可以正常构建。当然,这是否是个好主意... ;)
  • @Troubadour 是的,我昨天发现了同样的事情,它似乎有效;不确定是什么都坏了(如果有的话)。如果没有任何问题,那么首先不确定为什么需要这样做。虽然,我仍然不明白为什么这会失败。也感谢您回复。对其他人确认同样的事情也有好处。欣赏它。

标签: c++ qt4 qgraphicsview qgraphicsitem


【解决方案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

【讨论】:

  • 嗨,对不起,我没有早点回复。添加 Q_DISABLE_COPY 并不能解决此问题;正如我在上面评论的那样,删除 Q_INTERFACES 宏已修复它。或者看起来是这样。 :)
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2013-06-23
  • 1970-01-01
  • 2019-05-24
相关资源
最近更新 更多