簡體   English   中英

通過 QObject 子類實現多重繼承的最接近解決方案

[英]Closest solution to multiple inheritance through QObject subclasses

我有多個 QObject 子類,它們應該作為接口類並由(繼承)一些其他類來實現。 例如讓class A : virtual public QObjectclass B : virtual public QObject是接口類。 我需要一個QDialog對象來實現它們的行為,例如: class X: public QDialog, A, B

不幸的是,我在設計時沒有仔細閱讀文檔,現在我意識到了兩個事實:

  1. 將插槽實現為純虛擬成員函數是不可能的,因為 moc 生成的代碼需要調用它們。
  2. QObject 派生類不支持多重繼承。 那不是鑽石的東西。 這是因為MOC生成的代碼不能static_cast一個虛擬QObject對象到A*通過虛擬基。 (這就是編譯器所說的!)

什么是盡可能少地影響代碼的最佳替代設計? 我可以想到宏黑客。 也許基類中的宏(如Q_OBJECT )將基類的所有成員、信號、槽復制到派生類?

注意QObject不能被多次繼承真的很糟糕。 不是嗎?

如果您確實需要通過AB類公開QObject成員函數,請創建一個抽象基類(即只有純虛成員函數的類),例如AbstractQObject ,並在那里重新聲明您需要公開的QObject成員函數。

AB虛擬地從AbstractQObject派生, XQDialogAB派生。

這應該可以解決您描述的問題,但我懷疑您最好重新設計代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM