QGraphicsItem中出现奇怪的“不完整类型”错误

时间:2012-04-12 10:59:39

标签: c++ qt qgraphicsitem incomplete-type

  

可能重复:
  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->setCursor(Qt::OpenHandCursor);在主方法中设置光标效果很好。这个错误在其他QGraphicsItems中似乎是持久的(至少我测试了QGraphicsRectItem)。

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

谢谢, 路易丝

2 个答案:

答案 0 :(得分:5)

在您的cpp上,请包含以下行:

#include <QCursor>

问题是你正在使用的某个类声明了QCursor(做出前瞻性声明,它是......呃,说'转发声明'是对的吗?)。 Qt::OpenHandCursor具有此类型,但编译器不知道定义类QCursor的位置。在cpp中包含定义的文件就可以了。

它在你的main函数中工作的原因可能是因为你包含<QtGui>,或者包含QCursor的其他一些标题,你不知道它。

答案 1 :(得分:0)

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

我假设

setCursor(QCursor(Qt::OpenHandCursor));

会做你想做的事。

知道您提到的“项目”是如何工作的将会很有趣。