【问题标题】:Weird "incomplete type" error in a QGraphicsItem [duplicate]QGraphicsItem中奇怪的“不完整类型”错误[重复]
【发布时间】:2012-04-24 17:15:25
【问题描述】:

可能重复:
What leads to incomplete types? (QGraphicsItem: Source or target has incomplete type)

我从这个问题开始:What leads to incomplete types? (QGraphicsItem: Source or target has incomplete type)

如上所述,我收到以下错误(部分是我自己的翻译):

C664:将参数 1 从 'Qt::CursorShape' 转换为 'const QCursor &' 不可能。源或目标的类型不完整。

在试图找出项目可能不完整的原因时,我将其简化为仍然显示错误的最小测试用例。奇怪的是:它绝对最小的......

标题:

#include <QGraphicsPixmapItem>

class PhotoItem : public QGraphicsPixmapItem
{
public:
    PhotoItem();
    void someMethod();

protected:
};

实施:

#include "photoitem.h"

PhotoItem::PhotoItem() : QGraphicsPixmapItem()
{
    QPixmap pxm(80, 80);
    pxm.fill(Qt::cyan);
    setPixmap( pxm );
}

void PhotoItem::someMethod()
{
    setCursor(Qt::OpenHandCursor);
}

它没有编译,给出如上的错误。但是,使用 item-&gt;setCursor(Qt::OpenHandCursor); 在 main 方法中设置光标就可以了。该错误似乎在其他 QGraphicsItems 中持续存在(至少我测试了 QGraphicsRectItem)。

我完全糊涂了,不知道接下来要检查什么。上面的代码是否适用于其他机器/设置?我还可以测试什么来获取更多信息?

谢谢, 路易丝

【问题讨论】:

  • +1 用于创建一个问题仍然存在的简单示例
  • ...我已经在您之前链接到的问题中发布了the answer
  • 是的,在那里 +1 ;) 以为你可以将它迁移到这里,但 Castilho 已经回答了,而且非常具体。

标签: c++ qt qgraphicsitem incomplete-type


【解决方案1】:

在您的 cpp 中,包含以下行:

#include <QCursor>

问题是您正在使用的某些类前向声明​​ QCursor(进行前向声明,它是......呃,说“前向声明”是否正确?)。 Qt::OpenHandCursor 有这种类型,但是编译器不知道 QCursor 类是在哪里定义的。在 cpp 中包含进行定义的文件就可以了。

它在你的 main 函数中起作用的原因可能是因为你在其中包含了&lt;QtGui&gt;,或者在你不知道的情况下为你包含了 QCursor 的其他一些标题。

【讨论】:

  • 这么简单的小东西...非常感谢!我真的觉得我应该知道 - 我想我真的很困惑,因为它以前工作了很长时间。 ;) 但正如你所说:我一定是在不知不觉中包含了一些包含 QCursor 的东西,当我清理项目时丢失了。
【解决方案2】:

QGraphicsItems::setCursor 期望引用 QCursor 类型的对象,但您尝试传递 Qt::OpenHandCursor ,它是一个枚举元素,即可以用来构造特定 QCursor 实例的常数。

我认为

setCursor(QCursor(Qt::OpenHandCursor));

会做你想做的。

知道你提到的“项目”是如何被声明为工作的会很有趣。

【讨论】:

  • 您的想法实际上是我的第一个想法,尽管使用枚举 Qt::CursorShape 的行源自 Qt 示例并且之前肯定有效。我尝试了与您给出的相同的行,但错误与以前相同。然后我偶然发现了编译器消息中关于不完整类型的小注释,这导致了上述问题,卡斯蒂略的回答解决并解释了我的问题。 Qt 在幕后做了一些魔术,以便将枚举转换为所需的光标,因此您可以这样使用它。
  • 顺便说一句,那个'魔法'是非explicit构造函数QCursor(Qt::CursorShape shape)
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
相关资源
最近更新 更多