Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “奇怪”;“不完整类型”;QGraphicsItem中的错误_C++_Qt_Qgraphicsitem_Incomplete Type - Fatal编程技术网

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));