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

use*_*590 0 c++ qt slot

我在小部件和连接插槽中的继承方面存在一些问题.我创建了一个继承自的Widget QWidget.这是原型:

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

然后我创建了派生类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);
};
Run Code Online (Sandbox Code Playgroud)

WidgetParamsWindows,我有一些QSpinBox,QPushButton等调整参数.

我像这样连接QSpinBoxin WidetParamsWindows:

connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(changeSomeParam(int));
Run Code Online (Sandbox Code Playgroud)

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

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

QObject::connect: No such slot WidgetParams::changeSomeParam(int)
Run Code Online (Sandbox Code Playgroud)

我不知道为什么父Widget会占用插槽,而不是WidgetParamsWindows,你有任何想法吗?

Mac*_*iej 5

没有Q_OBJECT宏观WidgetParamsWindow,所以moc不能解决插槽宏,尝试添加Q_OBJECTWidgetParamsWindow