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

问题描述 投票:0回答:1

我在小部件和连接插槽的继承方面遇到一些问题。我创建了一个抽象的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,您有什么想法吗?

c++ qt slot
1个回答
5
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.