C++ “奇怪”;“不完整类型”;QGraphicsItem中的错误
可能重复:C++ “奇怪”;“不完整类型”;QGraphicsItem中的错误,c++,qt,qgraphicsitem,incomplete-type,C++,Qt,Qgraphicsitem,Incomplete Type,可能重复: 我从这个问题开始: 正如上面提到的,我得到了以下错误(部分是我自己的翻译): C664:将参数1从'Qt::CursorShape'转换为'const' QCursor&'不可能。源或目标的类型不完整 在试图找出该项可能不完整的原因时,我将其简化为一个仍然显示错误的最小测试用例。奇怪的是:它是绝对最小的 标题: #include <QGraphicsPixmapItem> class PhotoItem : public QGraphicsPixmapItem { p
我从这个问题开始: 正如上面提到的,我得到了以下错误(部分是我自己的翻译): C664:将参数1从'Qt::CursorShape'转换为'const' QCursor&'不可能。源或目标的类型不完整 在试图找出该项可能不完整的原因时,我将其简化为一个仍然显示错误的最小测试用例。奇怪的是:它是绝对最小的 标题:
#include <QGraphicsPixmapItem>
class PhotoItem : public QGraphicsPixmapItem
{
public:
PhotoItem();
void someMethod();
protected:
};
它不编译,给出如上所述的错误。但是,使用item->setCursor(Qt::OpenHandCursor)在main方法中设置光标代码>工作正常。这个错误似乎在其他QGraphicsSitem中持续存在(至少我测试了QGraphicsRecitem)
我完全糊涂了,不知道下一步该检查什么。上述代码是否适用于其他机器/设置?我还可以测试什么来获取更多信息
谢谢,
Louise在您的cpp上,包括以下行:
#include <QCursor>
#包括
问题是,您正在使用的某个类声明了forward QCursor(做了一个forward声明,它是……呃,说‘forward declares’对吗?)Qt::OpenHandCursor
具有此类型,但编译器不知道类QCursor的定义位置。在cpp中包含定义所在的文件会起作用
它在您的主函数中工作的原因可能是因为您在那里包含了
,或者其他一些包含QCursor的头,而您并不知道它。
我想
setCursor(QCursor(Qt::OpenHandCursor));
我会做你想做的
了解您提到的“项目”是如何被声明为有效的是很有意思的。+1创建一个简单的示例,说明您的问题仍然存在。。。我已经在您之前的问题中对此进行了发布,您已链接到该问题。是的,和+1;)我以为你可以把它迁移到这里,但卡斯蒂略已经回答了,而且非常明确。这么简单,这么小的事情。。。谢谢!我真的觉得我应该知道——我想我真的很困惑,因为它以前工作了很长时间但正如您所说:我一定是无意中包含了QCursor,在我清理项目时丢失了它。您的想法实际上是我的第一个想法,尽管使用enum Qt::CursorShape的行源于Qt示例,并且以前确实有效。我试了你说的那句话,错误和以前一样。然后我偶然发现了编译器消息中关于不完整类型的小注释,这导致了上面的问题,Castilho的答案解决并解释了我的问题。Qt在幕后发挥了一些魔力,因此枚举被转换成所需的游标,因此您可以这样使用它。顺便说一句,“魔力”是非构造函数QCursor(Qt::CursorShape shape)
。
setCursor(QCursor(Qt::OpenHandCursor));