代码之家  ›  专栏  ›  技术社区  ›  San Jacinto

在Qt中,如何使用具有多重继承的Q_对象插槽和信号?

  •  6
  • San Jacinto  · 技术社区  · 15 年前

    我浏览了相关的问题,找不到任何与我所谈论的内容完全相符的东西,所以让我来描述一下。

    我有一个类,比如说foo,它需要有自己的插槽和信号,但也需要从qxmldaulthandler继承(听起来很奇怪,但我在尝试使用QHttp将网站直接读入QBuffer时遇到了这种情况)。

    class foo: public QXmlDefaultHandler, public QObject
    {
        public:
            foo();
            ~foo();
    
           Q_OBJECT
       public slots:
           void bar();
    }
    

    如果该代码附带一个cpp将bar连接到其他地方的信号,则不会编译。您将收到关于QObject的某些成员不是QXmlDefaultHandler成员的错误。另外,你不能移动Q_对象,否则你会因为没有实现某些东西而得到vtable错误(继续!试试看。

    2 回复  |  直到 15 年前
        1
  •  12
  •   Paul Dixon    15 年前

    这个 documentation for moc 声明在多重继承的情况下,提供QObject的类应该首先出现

    如果使用多重继承, 类是QObject的一个子类。也, 类是一个QObject。

     // correct
     class SomeClass : public QObject, public OtherClass
     {
         ...
     };
    

    使用QObject的虚拟继承是 不支持。

        2
  •  2
  •   San Jacinto    15 年前
    class foo: public QObject, public QXmlDefaultHandler
    {
        public:
            foo();
            ~foo();
       Q_OBJECT
       public slots:
           void bar();
    }