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

Lou*_*ise 2 c++ qt qgraphicsitem incomplete-type

可能重复:
导致类型不完整的原因是什么?(QGraphicsItem:源或目标具有不完整类型)

我从这个问题开始:导致类型不完整的原因是什么?(QGraphicsItem:源或目标具有不完整类型)

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

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

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

标题:

#include <QGraphicsPixmapItem>

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

protected:
};
Run Code Online (Sandbox Code Playgroud)

执行:

#include "photoitem.h"

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

void PhotoItem::someMethod()
{
    setCursor(Qt::OpenHandCursor);
}
Run Code Online (Sandbox Code Playgroud)

它不编译,给出如上所述的错误.但是,在main方法中设置光标item->setCursor(Qt::OpenHandCursor);效果很好.这个错误在其他QGraphicsItems中似乎是持久的(至少我测试了QGraphicsRectItem).

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

谢谢,路易斯

Cas*_*lho 5

在您的cpp上,包括以下行:

#include <QCursor>
Run Code Online (Sandbox Code Playgroud)

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

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