2

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

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

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

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

它不编译,给出如上的错误。但是,在 main 方法中设置光标item->setCursor(Qt::OpenHandCursor);就可以了。该错误似乎在其他 QGraphicsItems 中持续存在(至少我测试了 QGraphicsRectItem)。

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

谢谢,路易丝

4

2 回答 2

5

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

#include <QCursor>

问题是您正在使用的某个类前向声明​​ QCursor(进行前向声明,它是......呃,说“前向声明”是否正确?)。Qt::OpenHandCursor有这种类型,但是编译器不知道 QCursor 类是在哪里定义的。在 cpp 中包含进行定义的文件就可以了。

它在您的主要功能中起作用的原因可能是因为您在其中<QtGui>包含 QCursor 或其他一些包含 QCursor 的标题,而您却不知道它。

于 2012-04-12T11:04:35.047 回答
0

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

我假设

setCursor(QCursor(Qt::OpenHandCursor));

会做你想做的。

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

于 2012-04-12T11:30:28.997 回答