连接子窗口小部件插槽上的信号

时间:2014-06-17 07:23:35

标签: c++ qt slot

我在小部件和连接插槽中有一些继承问题。我创建了一个继承自QWidget的抽象Widget。这是原型:

class WidgetParams : public QWidget
{
   Q_OBJECT
 public:
     explicit WidgetParams(QWidget *parent = 0) : QWidget(parent){}
     virtual bool paramChanged() = 0;
 protected:
      bool paramsChanged;
 };

然后我从WidgetParams创建了派生类,例如WidgetParamsWindows

class WidgetParamsWindows : public WidgetParams
{
  public:
    explicit WidgetParamsWindows(QWidget *parent = 0);
    virtual bool paramChanged(){return paramsChanged;}
  private:
    QFormLayout *layout;
    QSpinBox *svertical;
    QSpinBox *shorizontal;
  signals:

  public slots:
    void changeSomeParam(int value);
};

WidgetParamsWindows,我有一些QSpinBoxQPushButton等来调整参数。

我在QSpinBox中连接WidetParamsWindows,如下所示:

connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(changeSomeParam(int));

之后我创建了WidgetParamsWindows并将其放在WidgetParams列表中,以便在用户点击时显示正确的WidgetParams

但是当我尝试更改QSpinBox中的值时,没有任何更改,我在控制台中有以下消息:

QObject::connect: No such slot WidgetParams::changeSomeParam(int)

我不知道为什么父Widget取代了WidgetParamsWindows,而不是{{1}}, 你有什么想法吗?

1 个答案:

答案 0 :(得分:5)

Q_OBJECT中没有WidgetParamsWindow宏,因此moc无法解析插槽宏,尝试在Q_OBJECT中添加WidgetParamsWindow