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

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)


我不知道为什么父级窗口小部件占用了广告位而不是WidgetParamsWindows
你有什么想法 ?

最佳答案

Q_OBJECT中没有WidgetParamsWindow宏,因此moc不能解析插槽宏,请尝试在Q_OBJECT中添加WidgetParamsWindow

关于c++ - 在子小部件插槽上连接信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24257951/

10-11 22:38
查看更多