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

  • 相关阅读:
    mongoDB
    邮箱认证
    Django中开启事务的两种方式
    总结
    __new__和__init__和__call__方法理解
    jupyter
    text()和html()区别
    django模型中auto_now和auto_now_add的区别
    ajax嵌套陷阱
    模板内置函数(HTML)
  • 原文地址:https://www.cnblogs.com/findumars/p/4995930.html
Copyright © 2020-2023  润新知