2010-12-01 19 views
7

En un programa de QT, tengo una clase QWidget que es la superclase de otra clase declarada así:Ranuras QT y herencia: ¿por qué mi programa intenta conectarse con el padre en lugar de la clase hija?

class Renderer : public QGLWidget 
{ 
    Q_OBJECT 
    .... 
} 

class A : public Renderer 
{ .... } 

Ahora tienen una ranura para la clase A que no está presente en Procesador, pero cuando trato de ejecutar el programa, se deja de hacer conexiones con la clase a:

Object::connect: <sender name: 'push_button'> 
Object::connect: <receiver name: 'A'> 
Object::connect: No such slot Renderer::loadDialog() in <file path> 

¿Por qué está intentando conectarse al renderizador y no una? ¿Se supone que tengo una ranura en Renderer del mismo nombre?

Gracias

edición:

aquí es la declaración de la ranura A:

public slots: 
    void loadDialog(); 

y en cuanto a las conexiones, estoy confiando en Qt Creator en su mayoría, pero aquí es lo que era en el archivo ui_windows.h:

QObject::connect(pushButton, SIGNAL(clicked()), A, SLOT(loadDialog())); 

Espero que aclare un poco las cosas :)

Respuesta

12

¿Puede mostrar el código donde conecta la señal y la ranura? Tal vez también sería útil para ver la declaración ranura en la clase A.

EDIT:

intenta agregar macro Q_OBJECT en la subclase A. Otra cosa podría ser que la ranura no es virtual (pero de acuerdo con lo que leer eso no debería marcar la diferencia).

Estas son solo suposiciones, el código que publica se ve bien para mí. No tengo Qt disponible en esa computadora, así que no puedo probarlo :(.

+0

Agregado en la edición anterior – confusedKid

+2

Cuando quiera declarar nuevas señales/ranuras a su subclase, debe usar la macro Q_OBJECT –

Cuestiones relacionadas