Я пытаюсь вызвать сигнал, когда двойной щелчок происходит в одном из перетаскиваемых виджетов на примере магниты на холодильник . Вот изменения, которые я внес в пример источника:
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
};
Единственное, что я изменил в файле реализации, это добавление connect(this,SIGNAL(testSignal()),this,SLOT(testSlot()));
в конструктор DragLabel.
Попытка скомпилировать проект привела к ' неопределенной ссылке на `DragLabel :: testSignal () ' и ' collect2: ld вернул 1 состояние выхода ' ошибки.
Когда я закомментирую вызов сигнала, он компилируется и запускается, но выдает ' Object :: connect: такого сигнала нет QLabel :: testSignal () в draglabel.cpp ' предупреждение в вывод приложения. Очевидно, что testSignal () не распознается как сигнал.
Я пытался добавить макрос Q_OBJECT в DragLabel, но это приводит к 4 ' неопределенным ссылкам на `vtable for DragLabel' 'предупреждений и' collect2: ld вернул 1 состояние выхода 'ошибка.
Чего мне не хватает?