2012-04-12 66 views
2

可能重複:
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

+1用於創建一個簡單的示例,其中您的問題仍然存在 – Castilho 2012-04-12 11:14:27

+0

...我已經在您之前的問題中向您發佈了[答案](http://stackoverflow.com/a/10108869/594137)有聯繫。 – 2012-04-12 12:05:46

+0

是的,還有那裏;)認爲你可以遷移到這裏,但卡斯蒂略已經回答了,而且非常具體。 – Louise 2012-04-12 12:48:36

回答

5

在您的CPP,包括以下行:

#include <QCursor> 

的問題是,你使用了一些類聲明QCursor(使前向聲明,它是..呃,說'前鋒宣言'是否正確?)。 Qt::OpenHandCursor具有此類型,但編譯器不知道類QCursor的定義位置。在cpp上包含定義的文件就可以實現。

它在您的主要功能中起作用的原因可能是因爲您包括<QtGui>或其他包含QCursor的標題,而您並不知道它。

+0

這麼簡單,很小的東西......非常感謝!我真的覺得我應該知道 - 我想我很困惑,因爲它以前工作了很長時間。 ;)但正如你所說:我必須在不知不覺中包括一些包括QCursor的東西,當我清理這個項目時這些東西就迷了路。 – Louise 2012-04-12 11:32:57

0

QGraphicsItems :: setCursor期望引用一個類型爲QCursor的對象,但是您嘗試傳遞一個枚舉元素Qt :: OpenHandCursor,即可用於構造特定QCursor實例的常量數。

我認爲

setCursor(QCursor(Qt::OpenHandCursor)); 

會做你想要什麼。

知道你所說的「工作」是如何聲明的,這很有趣。

+0

你的想法實際上是我的第一個想法,雖然使用枚舉Qt :: CursorShape的行來自Qt示例並且以前肯定有效。我嘗試了與你給出的相同的路線,與以前一樣。然後,我偶然發現編譯器消息中關於不完整類型的小提示,這導致了上述問題,Castilho的答案解決並解釋了我的問題。 Qt在窗簾後面做了一些魔術,這樣enum就變成了需要的光標,所以你可以這樣使用它。 – Louise 2012-04-12 11:52:08

+0

即 '魔力' 是無[明確](http://en.cppreference.com/w/cpp/language/explicit)構造'QCursor(QT :: CursorShape形狀)',順便。 – 2017-09-21 11:01:38