Russian Qt Forum
Ноябрь 25, 2024, 08:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Мультинаследование от QObject  (Прочитано 3885 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Сентябрь 30, 2015, 21:29 »

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

MyWidget реализует showEven, hideEvent, а так же для хранения множества виджетов в векторах.
« Последнее редактирование: Сентябрь 30, 2015, 21:44 от deMax » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Октябрь 01, 2015, 01:47 »

Через темплейт,например
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #2 : Октябрь 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 унаследованы? Какие могут возникнуть проблемы?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Октябрь 01, 2015, 11:27 »

наследование - вещь статическая. Её нельзя "перенаследовать" в рантайме.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Октябрь 01, 2015, 12:37 »

Есть окна в приложении они наследуются от класса class MyWidget: public QWidget.
Одному окну понадобилось занаследоваться от QMainWindow (меню через дизайнер, панели). Как его перенаследовать?
Никак, нужно менять наследование на членство
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #5 : Октябрь 06, 2015, 14:42 »

Есть окна в приложении они наследуются от класса class MyWidget: public QWidget.
Одному окну понадобилось занаследоваться от QMainWindow (меню через дизайнер, панели). Как его перенаследовать?
Никак, нужно менять наследование на членство
Направление верное, дистанция короткая ))
Двойное делегирование поможет добиться желаемого.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Октябрь 06, 2015, 14:53 »

А если что-то типа этого?

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

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

Код:
class MyMainWidget: public MyWidget<QMainWindow>
{
...
};
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Октябрь 06, 2015, 15:12 »

А если что-то типа этого?
К разговору в "той" теме. Вот даже такой template (казалось бы - безобидно, и основания-то есть) легко может оказаться неуместным. Классы-то разные, и их не привести друг к другу.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 23.