Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос про организацию кода, Ликбез по QT 
V
    Опции темы
azesmcar
Дата 4.8.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(andrew_121 @  4.8.2009,  14:26 Найти цитируемый пост)
Значит все ГУИ объекты в пространстве имен Ui. Унаследуйся, добавь свои методы. Инициализацию для каждого пиши в .cpp файле. 

Это считается хорошим стилем? Почему Qt генерирует код с композицией этого класса а не наследованием?

Это сообщение отредактировал(а) azesmcar - 4.8.2009, 14:32
PM   Вверх
SABROG
Дата 4.8.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(azesmcar @  4.8.2009,  14:00 Найти цитируемый пост)
Допустим
Нужно написать калькулятор
нам нужно ОДНО окно и множество кнопочек на нем.
как вы организуете класс окна, где поместите логику программы (функции подсчетов и так далее).

У меня нет пока мышления GUI разработчика, хотелось бы чтобы появилось.


На самом деле не правильно выбирать простые примеры. Они никогда не решают реальных задач. 

Для калькулятора достаточно одного main.cpp файла в который запихать всё целиком. Тут даже .ui файл не нужен. Где слоты, там и логика.
Я бы даже не стал писать отдельный класс для логических операций. Это скорее усложнит читабельность, чем реально поможет.

Все-таки для меня бизнес логика это не вообще любой маломальский код, который приходится писать в слотах, а реализация модульных вещей: парсеры xml, работа с БД, делегаты, унаследованные виджеты, работа с сетью и т.п.

Цитата(azesmcar @  4.8.2009,  14:31 Найти цитируемый пост)
Это считается хорошим стилем? Почему Qt генерирует код с композицией этого класса а не наследованием?

На самом деле я видел 3 варианты использование класса сгенеренного от .ui файла:
- полное наследование, при котором область видимости UI пропадает
- аггрегация UI класса
- использование указателя на UI

Где-то даже тема была о выборе одного из этих методов. Были и плюсы и минусы подходов. Но как я не пытался найти объяснение троллей, так и не нашел.

Это сообщение отредактировал(а) SABROG - 4.8.2009, 14:36


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
azesmcar
Дата 4.8.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(SABROG @  4.8.2009,  14:32 Найти цитируемый пост)
Для калькулятора достаточно одного main.cpp файла в который запихать всё целиком. Тут даже .ui файл не нужен. Где слоты, там и логика.
Я бы даже не стал писать отдельный класс для логических операций. Это скорее усложнит читабельность, чем реально поможет.

Все-таки для меня бизнес логика это не вообще любой маломальский код, который приходится писать в слотах, а реализация модульных вещей: парсеры xml, работа с БД, делегаты, унаследованные виджеты, работа с сетью и т.п. 

Ну хотелось бы чтобы вы не делали скидку на простоту примера smile 
Даже самый простой пример можно написать правильно, так чтобы в будущем его было проще расширить, добавить функциональность не потеряв красоты кода. Над учесть что в большинстве GUI приложений будет работа с БД (тут все усложняется). Просто хотелось бы увидеть сложный дизайн на простом примере, если это нереально - покажите сложный пример. smile 
А калькулятор - вполне реальная задача. Вон, микрософт его столько лет расширить не могла, сейчас совсем переписали smile наверное проблемы архитектуры smile 
PM   Вверх
andrew_121
Дата 4.8.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



Цитата(azesmcar @  4.8.2009,  14:31 Найти цитируемый пост)
Почему Qt генерирует код с композицией этого класса а не наследованием?

Хороши вопрос. Многими был задан ранее.

Серьезный проект на Qt - http://www.qutecom.org/


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 4.8.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Да, вариант с наследованием мне тоже определенно нравится больше, но в таком случае хотелось бы заставить Qt генерировать объекты в хотя бы в protected секции (я уже не говорю про функции доступа) smile 
PM   Вверх
SABROG
Дата 4.8.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



А чем QtCreator не серьезный проект? Исходники есть. Еще можно посмотреть в сторону QDevelop и qutim. В принципе сами утилиты Qt: Designer и Assistant достаточно серьезны. Можно конечно еще серьезней - KDE.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
andrew_121
Дата 4.8.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



azesmcar, Нет у uic-а такой опции.
Делай по другому.
Подключай генерированные хидеры, но не используй объект из namespace::Ui, наследуйся от объекта Ui_[имя формы]. Оно же тебе известно.

Это сообщение отредактировал(а) andrew_121 - 4.8.2009, 14:50


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 4.8.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(andrew_121 @  4.8.2009,  14:49 Найти цитируемый пост)
Подключай генерированные хидеры, но не используй объект из namespace::Ui, наследуйся от объекта Ui_[имя формы]

а что это изменит?
PM   Вверх
andrew_121
Дата 4.8.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



Цитата(azesmcar @  4.8.2009,  14:50 Найти цитируемый пост)
а что это изменит? 

Пихай предков в протектед.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 4.8.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(andrew_121 @  4.8.2009,  14:53 Найти цитируемый пост)
Пихай предков в протектед. 

зачем в protected, сразу в private. Это ясно, я имел ввиду в самом классе забить все в protected. Ладно, нельзя так нельзя.
PM   Вверх
andrew_121
Дата 4.8.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



Я привык формы создавать дизайнером. Но все остальное ручками пишу. Может средства разработки как-то иначе этот процесс выполняют...

Добавлено @ 14:58
Цитата(azesmcar @  4.8.2009,  14:56 Найти цитируемый пост)
я имел ввиду в самом классе забить все в protected. Ладно, нельзя так нельзя. 

Ну если уж невмоготу, измени uic, его коды прилагаются smile 

Это сообщение отредактировал(а) andrew_121 - 4.8.2009, 14:59


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
SABROG
Дата 4.8.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(azesmcar @  4.8.2009,  14:50 Найти цитируемый пост)
а что это изменит? 


Я думаю ничего, точно также как и эта тема. Если хочется побороться за "правое" дело с троллями, то мы будем только рады почитать переписку и услышать их аргументы.

Может быть тебе будет интересна эта ссылка.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
azesmcar
Дата 4.8.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Такой вопрос.

Есть ли гарантия, что Qt завтра не станет генерировать класс Ui_mainwindowClass наследником QObject? В этом случае появится проблема.
Код

class mainwindow : public QMainWindow, private Ui::mainwindowClass //тут проблема

наследование от двух классов, наследников от QObject - не разрешено.
Может потому в генерированном исходнике используется вариант с агрегацией?

Это сообщение отредактировал(а) azesmcar - 4.8.2009, 15:00
PM   Вверх
andrew_121
Дата 4.8.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



Цитата(azesmcar @  4.8.2009,  15:00 Найти цитируемый пост)
Есть ли гарантия, что Qt завтра не станет генерировать класс Ui_mainwindowClass наследником QObject?

Нет.
С версии 4.6 многое измениться. Точнее SABROG знает. Потом, еще что-то радикально могут изменить.

Это сообщение отредактировал(а) andrew_121 - 4.8.2009, 15:05


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
VC15
Дата 4.8.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.8.2009

Репутация: нет
Всего: нет



Цитата
Да, вариант с наследованием мне тоже определенно нравится больше, но в таком случае хотелось бы заставить Qt генерировать объекты в хотя бы в protected секции (я уже не говорю про функции доступа)


Я думаю, uic специально генерит всё в public, чтобы ты сам потом решал, как это использовать. Если хочешь все члены спрятать (а так обычно и надо делать), используй private-наследование.

P.S. На мой взгляд, тема себя исчерпала. Преимущества средств разработки заключаются в тех возможностях, которые они дают, а не в том, как с их помощью можно организовать свой код. Хотя, конечно, организация и читабельность кода - это очень важные его свойства.
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0909 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.