我对小部件和连接插槽中的继承存在一些问题。我创建了一个抽象的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
关于c++ - 在子小部件插槽上连接信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24257951/