我在小部件和连接插槽中有一些继承问题。我创建了一个继承自QWidget
的抽象Widget。这是原型:
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)
我不知道为什么父Widget取代了WidgetParamsWindows
,而不是{{1}},
你有什么想法吗?
答案 0 :(得分:5)
Q_OBJECT
中没有WidgetParamsWindow
宏,因此moc
无法解析插槽宏,尝试在Q_OBJECT
中添加WidgetParamsWindow