Russian Qt Forum

Qt => Вопросы новичков => Тема начата: deMax от Сентябрь 30, 2015, 21:29



Название: Мультинаследование от QObject
Отправлено: deMax от Сентябрь 30, 2015, 21:29
Есть окна в приложении они наследуются от класса class MyWidget: public QWidget.
Одному окну понадобилось занаследоваться от QMainWindow (меню через дизайнер, панели). Как его перенаследовать?

MyWidget реализует showEven, hideEvent, а так же для хранения множества виджетов в векторах.


Название: Re: Мультинаследование от QObject
Отправлено: Racheengel от Октябрь 01, 2015, 01:47
Через темплейт,например


Название: Re: Мультинаследование от QObject
Отправлено: deMax от Октябрь 01, 2015, 10:35
А пример можно? как превратить b в наследника QMainWindow?

Код:
class MyWidget: public QWidget{
void showEvent(QShowEvent*){}};
class A: public MyWidget{} a;
class B: public MyWidget{} b;
Qlist<MyWidget*> l;
l<<a<<b;

А если в приложении 5 окон будут от QMainWindow унаследованы? Какие могут возникнуть проблемы?


Название: Re: Мультинаследование от QObject
Отправлено: Alex Custov от Октябрь 01, 2015, 11:27
наследование - вещь статическая. Её нельзя "перенаследовать" в рантайме.


Название: Re: Мультинаследование от QObject
Отправлено: Igors от Октябрь 01, 2015, 12:37
Есть окна в приложении они наследуются от класса class MyWidget: public QWidget.
Одному окну понадобилось занаследоваться от QMainWindow (меню через дизайнер, панели). Как его перенаследовать?
Никак, нужно менять наследование на членство


Название: Re: Мультинаследование от QObject
Отправлено: kai666_73 от Октябрь 06, 2015, 14:42
Есть окна в приложении они наследуются от класса class MyWidget: public QWidget.
Одному окну понадобилось занаследоваться от QMainWindow (меню через дизайнер, панели). Как его перенаследовать?
Никак, нужно менять наследование на членство
Направление верное, дистанция короткая ))
Двойное делегирование поможет добиться желаемого.


Название: Re: Мультинаследование от QObject
Отправлено: Racheengel от Октябрь 06, 2015, 14:53
А если что-то типа этого?

Код:
template<class T = QWidget>
class MyWidget: public T
{
...
};

Тогда при наследовании можно будет сделать примерно так:

Код:
class MyMainWidget: public MyWidget<QMainWindow>
{
...
};


Название: Re: Мультинаследование от QObject
Отправлено: Igors от Октябрь 06, 2015, 15:12
А если что-то типа этого?
К разговору в "той" теме. Вот даже такой template (казалось бы - безобидно, и основания-то есть) легко может оказаться неуместным. Классы-то разные, и их не привести друг к другу.