链接器错误:类方法的未定义引用

时间:2015-09-01 17:00:36

标签: qt qt5 qwidget moc qlayout

我遵循非常简单的Qt project

我有

#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

#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 

我刚刚在超类Abstractwidget上创建了setValue虚拟,它丢弃了以下链接器错误:

  

moc_abstractwidget.cpp:-1:Fehler:未定义引用   `AbstractWidget :: setValue(QVariant const&amp;)'

     

collect2.exe:-1:Fehler:错误:ld返回1退出状态

重建所有并清理没有帮助。为什么没有链接?

  1. 抽象是一个糟糕的命名,对不起我的坏。将它视为一个超类(非抽象),我从中派生出其他类。

  2. 我在MainWindow :: Ui :: QVBoxLayout中动态注入那些AbstractWidget类(例如我有多个SliderWidgets和ColorPickerWidget:public Abstractwidget)。我只是想保持简单。

  3. 为什么要派生?我有多个QWidgets(除了SliderWidget)派生自AbstractWidget类。它们都有一个QString名称。我想在基类中提供该名称==&gt; AbstractWidget。

  4. 为什么virtual void setValue():每个派生类都有类似滑块,颜色选择器等的东西。我在每个派生类中实现一个setValue(QVariant),以便colorpicker设置QColor(QVariant :: toString()并且SliderWidget用setValue(QVariant :: toInt())等设置sliderValue。 setValue在任何地方都是公共的(虚拟基类和派生实现)。

0 个答案:

没有答案