En Qt, ¿cómo se utiliza ranuras y señales Q_OBJECT con la herencia múltiple?

StackOverflow https://stackoverflow.com/questions/1489238

  •  18-09-2019
  •  | 
  •  

Pregunta

Miré a través de las preguntas relacionadas y no pude encontrar nada que se ocupa exactamente lo que estaba hablando, así que vamos a describir.

Tengo una clase, digamos foo que tiene que tener sus propias ranuras y las señales, sino que también debe heredar de QXmlDefaultHandler (suena bastante extraño, pero me encontré con esta situación al intentar utilizar QHttp para leer una página web directamente en una QBuffer).

class foo: public QXmlDefaultHandler, public QObject
{
    public:
        foo();
        ~foo();

       Q_OBJECT
   public slots:
       void bar();
}

Este código, si se acompaña de un CPP para conectar la barra a una señal en otra parte, no se compilará. Usted obtendrá errores sobre algunos miembros de QObject no ser miembro de QXmlDefaultHandler. Además, no se puede mover Q_OBJECT o de lo contrario se producen errores de vtable para no implementar algunas cosas (ir en! Probarlo!).

Por favor, vea mi respuesta para el (muy simple) fijar. Voy a votar entretenimiento como la respuesta aceptada si creo que lo explica mejor que yo.

Editar: para usted C ++ y Qt veterinarios, por favor enviar una respuesta si se puede explicarlo mejor. Me pasé un poco de tiempo buscando esta información, así que por favor ayuda de otra persona si puede hacerlo mejor que yo.

Otros consejos

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

Tan simple como suena, si usted no pone QObject por primera vez en la lista de herencia, esta tarea es imposible. Es una limitación del sistema meta objeto de Qt. Si no se hace esto, el compilador intentará aplicar algunos miembros de QObject como parte de QXmlDefaultHandler.

scroll top