Qt: перенести метод базового класса в слоты в производном классе

#qt #signals-slots #qobject

#qt #сигналы-слоты #qobject

Вопрос:

У меня есть класс, который является производным от QWidget и класса модели. Основываясь на моем чтении, я не могу получить класс модели для получения из QObject.

 class PageWidget : public QWidget,
        public MyModelClass
{
...
};
  

в классе модели MyModelClass уже есть метод для установки таких свойств, как setWidth(bool). Кажется, я не могу использовать этот метод непосредственно в качестве слотов. Если я объявлю:

QObject::connect(кнопка, сигнал (изменение данных (bool)), this, СЛОТ(setWidth(bool)));

Qt жалуется во время выполнения, что нет заданной ширины слота (bool). Я должен вручную добавлять каждый метод в PageWidget, который просто вызывает тот же метод MyModelClass .

Есть ли какой-либо способ перенести базовые методы в слоты без повторного объявления каждого метода?

Комментарии:

1. Да: не используйте множественное наследование 🙂 Вы уверены, что вам это нужно? Особенно, если у вас есть конфликты имен методов, вы настраиваете себя на большую боль.

Ответ №1:

QMetaObject (часть Qt, которая позволяет вам использовать слоты) и множественное наследование не смешиваются. Ваше решение о создании «сквозных» слотов — это способ его решения. Однако, если вам не нужно выполнять множественное наследование, я бы этого не делал. Просто с первого взгляда кажется странным, что PageWidget является производным как от виджета, так и от модели. Вероятно, имеет больше смысла, чтобы вместо этого он содержал модель.

Комментарии:

1. Это правильно. Невозможно умножить наследование от двух классов, которые оба являются QObjects .