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

    在买来的控件(没有源码)的基础上,想加入QObject的一些特性,不得不多继承:

    class MyProgress : public CProgress, public QObject

    但总是报错:

    releasemoc_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功能)。

  • 相关阅读:
    162. Find Peak Element
    475. Heaters
    字符串统计
    数据的交换输出
    偶数求和
    青年歌手大奖赛_评委会打分
    蟠桃记
    素数判定
    多项式求和
    出现Presentation Error的解决方法
  • 原文地址:https://www.cnblogs.com/findumars/p/4995930.html
Copyright © 2011-2022 走看看