#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 .