Error extraño de “tipo incompleto” en un QGraphicsItem

Posible duplicado:
¿Qué lleva a tipos incompletos? (QGraphicsItem: Origen o destino tiene un tipo incompleto)

Comencé con esta pregunta: ¿Qué lleva a los tipos incompletos? (QGraphicsItem: Origen o destino tiene un tipo incompleto)

Como se mencionó allí, obtuve el siguiente error (en parte, mi propia traducción):

C664: La conversión del parámetro 1 de ‘Qt :: CursorShape’ a ‘const QCursor &’ no es posible. La fuente o el destino tiene un tipo incompleto.

Mientras trataba de averiguar por qué el elemento podría estar incompleto, lo reducí a un caso de prueba mínimo que aún muestra el error. Lo raro es que es absolutamente mínimo …

Encabezamiento:

#include  class PhotoItem : public QGraphicsPixmapItem { public: PhotoItem(); void someMethod(); protected: }; 

Implementación:

 #include "photoitem.h" PhotoItem::PhotoItem() : QGraphicsPixmapItem() { QPixmap pxm(80, 80); pxm.fill(Qt::cyan); setPixmap( pxm ); } void PhotoItem::someMethod() { setCursor(Qt::OpenHandCursor); } 

No se comstack, dando el error como arriba. Sin embargo, establecer el cursor en el método principal con item->setCursor(Qt::OpenHandCursor); funciona bien El error parece ser persistente en otros QGraphicsItems (al menos yo probé QGraphicsRectItem).

Estoy completamente confundido y realmente no sé qué comprobar a continuación. ¿El código anterior funciona en otras máquinas / configuraciones? ¿Qué más podría probar para obtener más información?

Gracias Louise

En tu cpp, incluye la siguiente línea:

 #include  

El problema es que alguna clase que esté utilizando forward declara QCursor (hace una statement forward, es … er, ¿es correcto decir ‘forward declara’?). Qt::OpenHandCursor tiene este tipo, pero el comstackdor no sabe dónde está definida la clase QCursor. Incluyendo en el cpp el archivo donde se realiza la definición hace el truco.

La razón por la que funciona en su función principal es probablemente porque está incluyendo , o algún otro encabezado que incluye QCursor para usted sin que usted lo sepa.

QGraphicsItems :: setCursor espera una referencia a un objeto de tipo QCursor, pero intenta pasar Qt :: OpenHandCursor, que es un elemento enum, es decir, un número constante que puede usar para construir una instancia específica de QCursor.

Asumo

 setCursor(QCursor(Qt::OpenHandCursor)); 

Haré lo que quieras.

Sería interesante saber cómo se declara su “artículo” que mencionó como trabajo.