码迷,mamicode.com
首页 > 编程语言 > 详细

QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样

时间:2015-11-25 22:27:26      阅读:1272      评论:0      收藏:0      [点我收藏+]

标签:

在买来的控件(没有源码)的基础上,想加入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功能)。

QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样

标签:

原文地址:http://www.cnblogs.com/findumars/p/4995930.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!