crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Наследование, Множественное наследование от QWidget
silver47
  опции профиля:
сообщение 19.1.2011, 16:17
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Доброго времени суток.

Задача такая: есть класс MainWindow, зависящий от QWidget. Есть другой класс, к примеру MainTab, который ставиться в QTabWidget, расположенного на MainWindow.
Необходимо предоставить доступ из класса MainTab к элементам класса MainWindow. Хотел сделать, унаследовав MainTab от MainWindow.

maintab.h:
#include <QWidget>
#include "mainwindow.h"

class MainTab : public QWidget, public MainWindow
{
....
};


Но, получается множественное наследование от QWidget (и MainWindow и MainTab наследуются от QWidget)
переделываю на такое:
#include <QWidget>
#include "mainwindow.h"

class MainTab : public MainWindow
{
....
};

Ругается, что не указан класс до {

Сделал передачей указателей на необходимые элементы класса MainWindow в конструктор MainTab.

Вопрос: как следует это делать(не передачу указателя в конструкторе, а обращение к элементам одного класса из другого) правильно?

Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Rocky
  опции профиля:
сообщение 19.1.2011, 17:26
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Вот теперь точно непонял.
Цитата
Сколько закладок - столько классов, конструкторы которых находятся внутри конструктора MainWidget

Это что имеется ввиду? Экземпляры классов создаются в конструкторе MainWidget?

Имхо тут наследование вообще не нужно. Оно усложнит только. К тому же, насколько я понимаю, вообще намного более предпочтительней использовать указатель, чем наследование (указатель обернутый в какой-нить QPointer например, в зависимости от того, что нужно). Если __злоупотреблять__ наследованием - это лишнее расходовние памяти, ухудшение скорости работы программы, усложнение кода. Да и прямой доступ я бы вообще не стал давать к QComboBox и пр. Если MainWidget им владеет, значит только он должен знать, как и что туда добавлять. Поэтому с т.з. проектирования лучше написать метод MainWidget::addComboBoxData(...) и т.п.

Насчет БД... Куда столько? с таблицами не путаете? Это тоже не есть хорошо, когда у одной программы - 5-10 баз данных... Пусть хоть 10000 таблиц - но в одной базе.

По-поводу передачи указателей. Для удобства можно обернуть их в отдельную структуру. Если добавите/удалите какой-нить виджет/БД/еще что-нибудь придется переписывать конструкторы, добавлять новые переменные в классы, которые их будут использовать. А так в одном-двух местах подправил и все (занес в структуру и инициализировал). Масштабируемость какжется называется. Плюс читаемость лучше. Вобщем, мои мысли такие =)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 19.1.2011, 17:41
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Цитата(Rocky @ 19.1.2011, 19:26) *
Это что имеется ввиду? Экземпляры классов создаются в конструкторе MainWidget?

Да, именно так.

Цитата(Rocky @ 19.1.2011, 19:26) *
Куда столько? с таблицами не путаете?

Нет, не путаю. 2 Базы - те над которыми работаем. Остальные две это мои кеши. Одна в памяти, для быстро меняющихся данных, другая - на локальном диске - для медленно меняющихся (работает как кеш браузера: сначала из кеша - потом снаружи).

Цитата(Rocky @ 19.1.2011, 19:26) *
Поэтому с т.з. проектирования лучше написать метод MainWidget::addComboBoxData(...) и т.п.

В этом проекте не вижу необходимости - лишь усложнит.

Цитата(Rocky @ 19.1.2011, 19:26) *
Для удобства можно обернуть их в отдельную структуру.

Не дорос ещё(самоучка), не знаю как сделать.

Итог: при малом количестве объектов - использовать передачу указателей на объекты, при бОльшем - передачу указателя на виджет.
Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.12.2024, 0:10