QT多重繼承的時候,要把QObject放在最前面,否則報錯——C++認為人性本惡,默認都是私有的,這點和Delphi的世界觀不一樣


在買來的控件(沒有源碼)的基礎上,想加入QObject的一些特性,不得不多繼承:

class MyProgress : public CProgress, public QObject

但總是報錯:

release\moc_my_tool.cpp:80:12: error: 'qt_metacast' is not a member of 'CProgress'
return CProgress::qt_metacast(_clname);

清除臨時文件,重新編譯幾次后,仍是如此,心想難道QT不支持別的類庫基礎上的多繼承?

后來靈機一動,可能要把QObject寫在最前面,這樣Q_OBJECT宏才會立刻展開,並應用於后續的繼承類,所以改成這樣:

class MyProgress : public QObject, public CProgress

這時候再編譯就行了。

 

不知道是有意,還是無意,QWidget也是先繼承QObject,然后再繼承QPaintDevice的。

------------------------------------------------------------------

另外值得注意的是,繼承的時候,要分別寫上兩個public(唉,C++認為人性本惡,默認都是私有的,這點和Delphi的世界觀不一樣),否則也會報錯,即QObject的一些功能不能用於CProgress(比如connect功能)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM