在買來的控件(沒有源碼)的基礎上,想加入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功能)。