我在插件和連接插槽中存在一些繼承問題。我創建了一個從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
等來調整PARAMS。
我WidetParamsWindows
連接QSpinBox
這樣的:
connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(changeSomeParam(int));
之後,我創建了一個WidgetParamsWindows
,並把它在WidgetParams
列表,以顯示正確的WidgetParams
當它的用戶點擊。
但是,當我試圖在QSpinBox
,沒有什麼變化改變價值,我在控制檯以下消息:
QObject::connect: No such slot WidgetParams::changeSomeParam(int)
我不知道爲什麼父窗口部件採取插槽,而不是WidgetParamsWindows
, 你有什麼想法嗎?
添加
Q_OBJECT
你能分享更多的代碼(尤其是類定義)?您是否也將'Q_OBJECT'宏添加到'WidgetParamsWindows'?聲明'changeSomeParam(int)'槽的位置在哪裏? –