I have following very simple Qt project:
I have
#ifndef ABSTRACTWIDGET_H
#define ABSTRACTWIDGET_H
#include <QWidget>
#include <QVariant>
namespace Ui {
  class AbstractWidget;
}
class AbstractWidget : public QWidget
{
  Q_OBJECT
public:
  explicit AbstractWidget(const QString &name, QWidget *parent = 0);
  ~AbstractWidget();
  QString getName();
  virtual void setValue(const QVariant & value);
protected:
  Ui::AbstractWidget *ui;
};
#endif // ABSTRACTWIDGET_H
and
#ifndef SLIDERWIDGET_H
#define SLIDERWIDGET_H
#include "abstractwidget.h"
#include <QSlider>
class SliderWidget : public AbstractWidget
{
  Q_OBJECT
public:
  explicit SliderWidget(const QString & name, int min, int max, QWidget *parent = 0);
  ~SliderWidget();
  void setValue(const QVariant & value);
private:
  QSlider * slider;
};
#endif // SLIDERWIDGET_H 
I just made setValue virtual at the super class Abstractwidget, which drops follwing linker error:
moc_abstractwidget.cpp:-1: Fehler: undefined reference to `AbstractWidget::setValue(QVariant const&)'
collect2.exe:-1: Fehler: error: ld returned 1 exit status
Rebuilding All and Cleaning up did not help. Why is it failing to link?
- Abstract is a bad nomencalture, sorry my bad. Consider it as a super class (not abstract) from which I derive other classes. 
- I inject in a MainWindow::Ui::QVBoxLayout dynamically those AbstractWidget classes (for instance I have multiple SliderWidgets and ColorPickerWidget : public Abstractwidget as well). I just wanted to keep it simple. 
- Why derive? I have multiple QWidgets (besides SliderWidget) deriving from AbstractWidget class. All of them have a QString name. I wanted to provide that name in the base class ==> AbstractWidget. 
- Why virtual void setValue(): Every derived class has somesting like a slider, colorpicker etc. I implement in each derived class a setValue(QVariant) so that the colorpicker sets the QColor(QVariant::toString()) and the SliderWidget sets the sliderValue with setValue(QVariant::toInt()), etc.. setValue is public everywhere (virtual base class and derived implementations). 
 
    