У меня есть некоторые проблемы с наследованием в виджетах и подключении слотов. Я создал абстрактный 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
Q_OBJECT
также вWidgetParamsWindows
? Где объявлен слотchangeSomeParam(int)
?