2010-04-20 38 views
1

我想創建一個自定義QGraphicsItem按鈕,如Fred here所示。他發佈的代碼可以找到here自定義QGraphicsItems不編譯,並給出「對象是私人」的錯誤

問題是,當我嘗試編譯代碼我得到以下兩個錯誤:

  • /usr/include/qt4/QtGui/qgraphicsitem.h 「的QGraphicsItem ::的QGraphicsItem(常量 的QGraphicsItem & )」是私人
  • /usr/include/qt4/QtCore/qobject.h
    '的QObject :: QObject的(常量的QObject &)' 是 私人

下面是代碼片段,它基本上與上面示例中的代碼片段相同。錯誤在於班級減速。

class MyButton : public QObject, public QGraphicsItem 
{ 
Q_OBJECT 
Q_INTERFACES(QGraphicsItem) 

public: 
MyButton(QGraphicsItem *parent = 0); 
MyButton(const QString normal, const QString pressed = "", QGraphicsItem *parent = 0); 
.... 
} 

有趣的是,如here所示的其他樣品正常工作。該示例代碼可以在here找到。

任何想法是什麼錯?提前致謝。

+0

我得到一個不同的錯誤 - 「button.h:31:錯誤:未定義的接口」。我正在使用Qt 4.5.2。它需要4.6嗎? – Troubadour 2010-04-20 21:21:14

+0

@Troubadour,我正在使用v4.5.0和第二個示例,正如我指出的那樣。所以它應該在v4.5.2上運行。當然,鑑於我得到這個錯誤,不知道我是否應該就此提供建議。 :) – bahree 2010-04-20 22:08:59

+0

謝謝。另一個樣本,以及來自同一地點的其他樣本,對我來說都很好。也許Qt版本的差異是導致不同錯誤的原因。恐怕我不知道爲什麼會出現任何錯誤,儘管如果你在第31行刪除了Q_INTERFACES宏,那麼這個例子的編譯效果會很好。不管這是個好主意還是當然不是; ... – Troubadour 2010-04-21 18:38:31

回答

1

這些錯誤看起來像試圖複製按鈕對象。編譯器試圖自動生成MyButton拷貝構造函數並失敗,因爲QObject的拷貝構造函數(這是你的按鈕基礎)是私有的。除了你列出的錯誤,你還應該看到像這樣的東西:

note: synthesized method 'MyButton::MyButton(const MyButton&)' first required here 

與此消息後面的源文件名和行號。如果您沒有看到此消息,請嘗試添加:

private: 
    Q_DISABLE_COPY(MyButton) 

以MyButton類定義。那麼你應該看到:

error: 'MyButton::MyButton(const MyButton&)' is private within this context 
+0

嗨,對不起,我沒有早點回來。添加Q_DISABLE_COPY並沒有解決這個問題;正如我上面所說的刪除Q_INTERFACES宏修復了它。或者看起來如此。 :) – bahree 2010-04-22 14:56:21

相關問題