2014-05-08 135 views
0

我需要創建一個從QTextEdit繼承的對象。問題是,每次我試圖從它繼承的時候,我得到以下錯誤:如何從Qt類繼承?

error C2248: 'QWidget::operator =' : cannot access private declared member from class 'QWidget'

我試圖定義operator=並沒有什麼作品。即使我也定義了一個copy constructor。我總是不斷收到這個錯誤。

回答

4

QWidget類是QObject的子類,它使用Q_DISABLE_COPY保護宏禁用了複製和分配操作。當您從QObject(或任何派生類)繼承時,您定義的複製構造函數或賦值運算符嘗試訪問基類的計數器部分,但它們在QObject中是私有的,並且無法訪問。這是設計。

作爲副作用,繼承自QObject的類的對象不能存儲在STL或Qt容器(向量,列表等)中。只能存儲指針或引用。因爲獲取/設置對象需要使用複製構造函數進行復制,這是不可能的。

如果同時需要從QWidget和重載operator=和/或copy constructor繼承,您可以通過添加明確的方法對這些任務像isEqualclone實現(雖然克隆QObject不是good idea)。

+0

這個答案可以通過具體說明(或一個)修正是什麼來改進。現在它只是解釋錯誤發生的原因。 –

+1

你聲明*每個Qt類是'QObject' *的子類,這是不正確的。並非所有的Qt類都是'QObject'的子類。 – thuga

+0

@thuga,請閱讀http://qt-project.org/doc/qt-5/QObject.html – Rakib