2011-10-10 4 views
1

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

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

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

QObject :: connect (кнопка, SIGNAl (dataChanged (bool)), это, SLOT (setWidth (bool)));

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

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

+1

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

ответ

5

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

+0

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