我在小部件和连接插槽中的继承方面存在一些问题.我创建了一个继承自的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,你有任何想法吗?