Estoy tratando de activar una señal cuando ocurre un doble clic en uno de los widgets que se pueden arrastrar en el fridge magnets example. He aquí los cambios que hice a la fuente de ejemplo:Qt - no hay tal error de señal
DragLabel:
class DragLabel : public QLabel
{
public:
DragLabel(const QString &text, QWidget *parent);
QString labelText() const;
public slots:
void testSlot(){qDebug()<<"testSlot";} //<-- implemented this slot
protected:
void mouseDoubleClickEvent(QMouseEvent *ev){emit testSignal();} //<-- overriden this method
private:
QString m_labelText;
signals:
void testSignal(); //<-- added this signal
};
Lo único que ha cambiado en el archivo de implementación es la adición de connect(this,SIGNAL(testSignal()),this,SLOT(testSlot()));
al constructor de DragLabel.
Tratando de compilar el proyecto dio lugar a 'referencia indefinida a `DragLabel :: testSignal()' 'collect2: ld devolvió 1 Estado de salida' y los errores.
Cuando comento hacia fuera la llamada a la señal, se compila y ejecuta, pero da off 'Objeto :: connect: No existe el QLabel señal :: testSignal() en draglabel.cpp' aviso en la salida de la aplicación. Aparentemente testSignal() no se reconoce como una señal.
He intentado añadir la macro Q_OBJECT a DragLabel pero el resultado es 4 'referencia indefinida a `vtable para DragLabel' 'advertencias y un'collect2: ld devolvió el código de salida 1 'error.
¿Qué me estoy perdiendo?
Su código de muestra no cuenta con la macro llamada Q_OBJECT, que podría ser la causa de sus problemas. –
Oh sí, me olvidé de mencionar eso, intenté agregar Q_OBJECT antes. Añadiré eso a la pregunta. –