我需要創建一個從QTextEdit繼承的對象。問題是,每次我試圖從它繼承的時候,我得到以下錯誤:如何從Qt類繼承?
error C2248: 'QWidget::operator =' : cannot access private declared member from class 'QWidget'
我試圖定義operator=
並沒有什麼作品。即使我也定義了一個copy constructor
。我總是不斷收到這個錯誤。
我需要創建一個從QTextEdit繼承的對象。問題是,每次我試圖從它繼承的時候,我得到以下錯誤:如何從Qt類繼承?
error C2248: 'QWidget::operator =' : cannot access private declared member from class 'QWidget'
我試圖定義operator=
並沒有什麼作品。即使我也定義了一個copy constructor
。我總是不斷收到這個錯誤。
QWidget
類是QObject
的子類,它使用Q_DISABLE_COPY
保護宏禁用了複製和分配操作。當您從QObject
(或任何派生類)繼承時,您定義的複製構造函數或賦值運算符嘗試訪問基類的計數器部分,但它們在QObject
中是私有的,並且無法訪問。這是設計。
作爲副作用,繼承自QObject
的類的對象不能存儲在STL或Qt容器(向量,列表等)中。只能存儲指針或引用。因爲獲取/設置對象需要使用複製構造函數進行復制,這是不可能的。
如果同時需要從QWidget
和重載operator=
和/或copy constructor
繼承,您可以通過添加明確的方法對這些任務像isEqual
或clone
實現(雖然克隆QObject
不是good idea)。
這個答案可以通過具體說明(或一個)修正是什麼來改進。現在它只是解釋錯誤發生的原因。 –
你聲明*每個Qt類是'QObject' *的子類,這是不正確的。並非所有的Qt類都是'QObject'的子類。 – thuga
@thuga,請閱讀http://qt-project.org/doc/qt-5/QObject.html – Rakib