Поиск:

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


uploading...
****


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

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



Цитата(VC15 @  4.8.2009,  16:10 Найти цитируемый пост)

P.S. На мой взгляд, тема себя исчерпала. Преимущества средств разработки заключаются в тех возможностях, которые они дают, а не в том, как с их помощью можно организовать свой код. Хотя, конечно, организация и читабельность кода - это очень важные его свойства. 

Да, но вообще-то тема была не об этом. smile 
PM   Вверх
andrew_121
Дата 4.8.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



azesmcar, А если серьезно, то и вправду можно изменить uic. Посмотрел, кода не много. Можно его генератор заточить как хочется, и будет он тебе генерить то, что хочешь.

Лежит в $(QTDIR)/src/tools/uic


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


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(azesmcar @  4.8.2009,  09:00 Найти цитируемый пост)
Да и кстати я смотрю на примеры в Qt, ни один из них не использовал ui файлы.

Посмотри код асистента, дизайнера.. Простые, но вполне реальные примеры.

Цитата(azesmcar @  4.8.2009,  09:00 Найти цитируемый пост)
mainwindow.h - заголовочный файл
mainwindow.cpp - реализация логики программы
mainwindow_i.cpp - инициализация кнопочек, установка событий (настройки интерфейса короче)
mainwindow_e.cpp - реализация slot -ов.

Так не стоит. Я считаю, что делить класс на файлы - это зло.

Цитата(azesmcar @  4.8.2009,  14:00 Найти цитируемый пост)
Применить MVC? Для каждой формы наследовать три класса...тоже не дело. Речь не о размещении файлов, а о разделении интерфейса и логики. Покажите мне грамотный во всех понятиях GUI код написанный на Qt и я успокоюсь если там будет свалено все в кучу

В мире Qt (да ладно, что уж самих себя обманывать - вообще в мире десктоп-гуя) MVC подход в нормальном виде не принят (Model View Framework в Qt - это не MVC).

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

Функции подсчётов - очевидно, отдельные классы (или просто функции даже). Это ж domain layer (busyness layer).
Отдельный виджет основного поля калькулятора (умеющего отображать состояния ошибки, переключать отображение числа с разной точностью и т. д.).
Отдельный виджет поля кнопок. Опционально - виджеты групп (блок цифр, блок таких-то операций, блок таких-то операций).
Возможно - подгрузка функций через плагины и соответственно абстракция для задания лейаута (в самописном xml-е проще всего) smile
Отдельный класс для основного окошка.
И т. д. Это ж только пример smile 

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

Потому что композиция лучше, чем наследование. Читаем любую книгу по ОО-дизайну.

Цитата(SABROG @  4.8.2009,  14:47 Найти цитируемый пост)
Еще можно посмотреть в сторону QDevelop и qutim

Насчёт криэйтора вообщем согласен, но всё-таки preffered way это ассистент с дизайнером (они проще гораздо). А вот последние два - не рекомендую. При том, что там есть хорошие идеи, как идеальный пример - точно не пойдут. Уж извините, но они остаются "оупенсорсными поделками" (проекты сами плохими из-за этого не становятся, я их уважая и пр. - поймите меня правильно).

Цитата(andrew_121 @  4.8.2009,  14:57 Найти цитируемый пост)
Ну если уж невмоготу, измени uic, его коды прилагаются smile 

На qtapps.org когда-то натыкался на "правильную" реализацию генерилки для ui-файлов (когда после переноса одного лейбла не надо рекомпилить всё).  Не тестил smile


--------------------
PM MAIL ICQ Skype   Вверх
andrew_121
Дата 5.8.2009, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(Любитель @  5.8.2009,  00:56 Найти цитируемый пост)
На qtapps.org когда-то натыкался на "правильную" реализацию генерилки для ui-файлов (когда после переноса одного лейбла не надо рекомпилить всё).  Не тестил smile 

Где "оно" ?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Любитель
Дата 5.8.2009, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



http://www.qt-apps.org/content/show.php/Sp...I?content=61344

Оказывается, работает как обёртка над uic-ом. Что, впрочем не есть плохо.


--------------------
PM MAIL ICQ Skype   Вверх
azesmcar
Дата 5.8.2009, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Любитель @  5.8.2009,  00:56 Найти цитируемый пост)
Посмотри код асистента, дизайнера.. Простые, но вполне реальные примеры.

Сейчас гляну.

Цитата(Любитель @  5.8.2009,  00:56 Найти цитируемый пост)
Так не стоит. Я считаю, что делить класс на файлы - это зло.

Я тоже не люблю делить, но просочилась идея от partial class -а в C#, студия генерирует функцию инициализации компонентов в отдельном от самого кода файле, думалось реализовать что-то наподобие этого, но...как я сказал мне и самому не нравится.

Цитата(Любитель @  5.8.2009,  00:56 Найти цитируемый пост)
В мире Qt (да ладно, что уж самих себя обманывать - вообще в мире десктоп-гуя) MVC подход в нормальном виде не принят (Model View Framework в Qt - это не MVC).

smile Я его применение удачно только для Web -а видел.

Цитата(Любитель @  5.8.2009,  00:56 Найти цитируемый пост)
Функции подсчётов - очевидно, отдельные классы (или просто функции даже). Это ж domain layer (busyness layer).
Отдельный виджет основного поля калькулятора (умеющего отображать состояния ошибки, переключать отображение числа с разной точностью и т. д.).
Отдельный виджет поля кнопок. Опционально - виджеты групп (блок цифр, блок таких-то операций, блок таких-то операций).
Возможно - подгрузка функций через плагины и соответственно абстракция для задания лейаута (в самописном xml-е проще всего) smile
Отдельный класс для основного окошка.
И т. д. Это ж только пример smile 

В общем-то все также, но сам интерфейс разделен на несколько групп. Ясно. Спасибо.

Цитата(Любитель @  5.8.2009,  00:56 Найти цитируемый пост)
Потому что композиция лучше, чем наследование. Читаем любую книгу по ОО-дизайну.

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

Ну а вообще-то не всегда. private наследование вполне приемлемо в данной ситуации (если не считать потенциальных проблем, которые я указал выше).

Любитель большое спасибо за содержательный пост.
PM   Вверх
Kipter
Дата 14.8.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



azesmcar
оО где где а вот в QT помоему не должно быть проблем с оформлением и размещением кода =)

если проект больше чем калькулятор или "блокнот" то лично я делаю:

1) Если интерфейс простой (1 окно, небольшое количество виджетов), большая чатсь программы - логика.
а. То весь интерфейс описываю в своем классе (KipMainWindow, унаследованный от QMainWindow или QDialog);
   в конструкторе класса описываеться интерфйес этого окна (создаються виджеты/лейоуты и т д)
  также этот класс наделяю функциями котоыре онтосяться только к интерфейсу! Никаких функций обрабатывающих логику (т.е назначение этой программы)
 и создаю слоты для влияния на интерфейс из классов логики.

б. Всю логику (Классы/функции назначения программы) заношу в другой класс/классы Наследуемые от QObject. Определяю слоты для сигналов от интерфейса и сигналы для влияния на интерфейс.

в. Связываю слоты и сигналы Обьекта интерфейса с Обьектами Логики =)

2) Если интерфейс большой и накручен множеством элементов управления, то разбиваю его на сегменты (Фреймы, меню, диалоги,) и распределяю их по нескольким классам. Которые позже создаю в том же KipMainWindow ну и дальше как в пункте 1

Добавлено через 5 минут и 45 секунд
В моем идеалистическом взгляде... необходимо отделять интерфейс и логику решающую конкретную задачу.
PM MAIL   Вверх
andrew_121
Дата 14.8.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(Kipter @  14.8.2009,  11:14 Найти цитируемый пост)
б. Всю логику (Классы/функции назначения программы) заношу в другой класс/классы Наследуемые от QObject. Определяю слоты для сигналов от интерфейса и сигналы для влияния на интерфейс.

Любопытно. Как такое возможно без наследования от QObject ? smile 


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


Шустрый
*


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

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



Цитата

Любопытно. Как такое возможно без наследования от QObject ?  


Я же сказал, все классы в приложении имеют наследование от QObject. Но темнеменее логика находиться отдельно от интерфейса (в разных классах)

Вообщем кому как удобно, можно хоть всю программу в 1 единственный класс запихнуть при желании =)))

PM MAIL   Вверх
korbian
Дата 17.8.2009, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(andrew_121 @  14.8.2009,  13:59 Найти цитируемый пост)
Любопытно. Как такое возможно без наследования от QObject ?

Любопытно, а почему так важен вопрос наследования от QObject? какие еще плюсы дает такой вариант, кроме общей для проекта модели взаимодействия сигнал\слот? 

имхо, при таком подходе логика становится зависимой от конечного user interface и непереносимой.


--------------------
korbian ©
PM   Вверх
andrew_121
Дата 17.8.2009, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(korbian @  17.8.2009,  08:00 Найти цитируемый пост)
Любопытно, а почему так важен вопрос наследования от QObject?

Без этого сигналы/слоты и много другое не будет работать.


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


Опытный
**


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

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



andrew_121, это как раз и понятно. smile


--------------------
korbian ©
PM   Вверх
Любитель
Дата 17.8.2009, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



korbian, Даёт возможность пользоваться автоматическим разрушением чайлд-объектов (если понятие иерархии применимо к ним), поиском чайлдов, загрузкой объектов из плагинов, пользоваться qobject_cast, etc. Хватит? smile 


--------------------
PM MAIL ICQ Skype   Вверх
korbian
Дата 17.8.2009, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Любитель, хватит. smile только мне кажется сомнительным награждать конечный интерфейс бизнес логики такими "ништяками", теряя переносимость. я бы делал еще один промежуточный слой для взаимодействия в концепции модели end-point user interface.

p.s. хотя qt давно уже не фреймворк для ГУИ, а гораздо больше и зависимость от нее может быть требованием проекта.


--------------------
korbian ©
PM   Вверх
Любитель
Дата 17.8.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(korbian @  17.8.2009,  10:20 Найти цитируемый пост)
хотя qt давно уже не фреймворк для ГУИ

Во-во.

Вы часто делали десять ГУИ-фронтендов к одной программе (да, бывает - но это исключение, а не правило)?


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

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

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


 




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


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

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