Sto provando a generare un segnale quando si verifica un doppio clic in uno dei widget trascinabili sullo fridge magnets example. Ecco i cambiamenti che ho fatto alla fonte esempio:Qt - nessun errore di segnale
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
};
L'unica cosa che ho cambiato nel file di implementazione è l'aggiunta connect(this,SIGNAL(testSignal()),this,SLOT(testSlot()));
al costruttore di DragLabel.
Cercando di compilare il progetto ha portato in 'undefined reference to `DragLabel :: segnale di test()' e 'collect2: ld returned 1 exit status di' errori.
Quando io commento la chiamata al segnale, compilato ed eseguito, ma emana 'Oggetto :: Connect: Nessun segnale tale QLabel :: segnale di test() in draglabel.cpp' avvertimento nell'output dell'applicazione. Apparentemente testSignal() non viene riconosciuto come segnale.
ho cercato di aggiungere la macro Q_OBJECT per DragLabel ma il risultato e 4 'undefined reference to `vtable per DragLabel' 'avvertimenti e un'collect2: ld returned 1 exit status 'errore.
Cosa mi manca?
Nel codice di esempio manca la chiamata macro Q_OBJECT, che potrebbe essere la causa dei problemi. –
Oh sì, ho dimenticato di dirlo, ho provato ad aggiungere Q_OBJECT prima. Lo aggiungerò alla domanda. –