подключить сигналы на слоте дочернего виджета

0

У меня есть некоторые проблемы с наследованием в виджетах и подключении слотов. Я создал абстрактный 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, есть ли у вас какие-то идеи?

  • 4
    Можете ли вы поделиться еще немного кода (особенно определения классов)? Вы добавили макрос Q_OBJECT также в WidgetParamsWindows ? Где объявлен слот changeSomeParam(int) ?
Теги:
qt
slot

1 ответ

5
Лучший ответ

В Q_OBJECT макроса WidgetParamsWindow, поэтому moc не разрешает макросы слотов, попробуйте добавить Q_OBJECT в WidgetParamsWindow

  • 0
    Благодаря его работам. Это был единственный макрос без Q_OBJECT, но теперь у меня проблема с «неопределенной vtable» при компиляции. Q_OBJECT должен добавить некоторое объявление для работы? Я проверяю, у меня есть другие WidgetParams, где я не забываю этот макрос и компиляция для них.
  • 0
    @ user3627590, вы запускали qmake до компиляции проекта?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню