我在小部件和连接插槽的继承方面遇到一些问题。我创建了一个抽象的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
中,我有一些QSpinBox
,QPushButton
等用于调整参数。
我这样将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