可能重复:
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)。
我完全糊涂了,不知道,接下来要检查什么。上面的代码是否适用于其他机器/设置?我还可以测试什么来获取更多信息?
谢谢, 路易丝
答案 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));
会做你想做的事。
知道您提到的“项目”是如何工作的将会很有趣。