Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разделение проекта на гуй и реализацию 
V
    Опции темы
boostcoder
Дата 21.10.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



кто-нибудь, подскажите, как в проекте с использованием Qt вы разделяете гуй от реализации?
всем спасибо.

Это сообщение отредактировал(а) boostcoder - 21.10.2010, 12:24
PM WWW   Вверх
SABROG
Дата 21.10.2010, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Таким образом.



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


pattern`щик
****


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

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



Цитата(SABROG @ 21.10.2010,  10:45)
Таким образом.

вы меня неверно поняли.
"отделить реализацию от гуя" - понимать дословно.

PM WWW   Вверх
SABROG
Дата 21.10.2010, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(boostcoder @  21.10.2010,  10:51 Найти цитируемый пост)
"отделить реализацию от гуя" - понимать дословно.


В случае с Qt это может быть 2-3 класса. 1 - GUI (QWidget), 2 - Logic (унаследованный от QObject'a), 3 - Logic 2 (обычный класс без мета-объектной системы). Сигналы от GUI подключаются к слотам Logic, слоты Logic взывают методы класса Logic 2. Но в простейшем случае между собой общаются только 2 QObject'a.


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


pattern`щик
****


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

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



Цитата(SABROG @  21.10.2010,  11:02 Найти цитируемый пост)
1 - GUI (QWidget), 2 - Logic (унаследованный от QObject'a), 3 - Logic 2 (обычный класс без мета-объектной системы). Сигналы от GUI подключаются к слотам Logic, слоты Logic взывают методы класса Logic 2

если я вас правильно понял, так так:
Код

class window: QWidget {
   window() {
      connect(any_widget, SIGNAL(any_signal()), &_impl, SLOT(any_slot()))
   }

   Logic _impl;
};

class Logic: QObject {
   void any_slot() {
      _real_impl.method();
   }

   int get_val() {
      return window->get_val();
   }

   window* window;
   Logic2 _real_impl;
};

class Logic2 {
   void method() {}
   void method2() {
      int val = // как вызвать Logic::get_val() ?
   }
};

псевдокод.

я вас правильно понял?

Это сообщение отредактировал(а) boostcoder - 21.10.2010, 11:23
PM WWW   Вверх
mes
Дата 21.10.2010, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  21.10.2010,  10:09 Найти цитируемый пост)
я вас правильно понял?

нет..

Logic2 не знает ничего о Logic..максимум что она может потребовать, это делегата.. 




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 21.10.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  21.10.2010,  11:32 Найти цитируемый пост)
Logic2 не знает ничего о Logic

я так же подумал.. потому и не понял.
PM WWW   Вверх
mes
Дата 21.10.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  21.10.2010,  08:25 Найти цитируемый пост)
всем спасибо? 

только сейчас заметил этот вопрос.. интересно ударение на каком из слов ?



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 21.10.2010, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  21.10.2010,  12:01 Найти цитируемый пост)
только сейчас заметил этот вопрос..

ы) smile 
PM WWW   Вверх
null56
Дата 21.10.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  21.10.2010,  11:32 Найти цитируемый пост)
Logic2 не знает ничего о Logic..максимум что она может потребовать, это делегата.. 

паттерн "посетитель (visitor)" не подойдет?
PM MAIL   Вверх
mes
Дата 21.10.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(null56 @  21.10.2010,  12:47 Найти цитируемый пост)
паттерн "посетитель (visitor)" не подойдет? 

ммм.. нельзя ли поподробней, куда именно Вы предлагаете впихнуть посетителя по отношению к обсуждаемому в теме ?



--------------------
PM MAIL WWW   Вверх
djamshud
Дата 21.10.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



У меня это разделено на три уровня. Первый - приложение. Второй - прослойка DOM-построения гуя в рантайме (обычно забивается через скриптуемый конфиг, но управлять можно и программно). Третий - плагин ко второму, собственно сам Qt, хотя в теории можно напрограммировать и на другом тулките. В конфиге описывается внешний вид программы и источники данных для разных элементов, кроме того первый уровень может просто сказать: "марь иванна, а давайте при###им на эту стену синий флажок? а сюда добавим такой элемент.. а тот удалим,.. а сюда занесем воон те данные", но обычно все ограничивается конфигом. Таким образом вся логика (первый уровень) в большинстве случаев полностью отделена от гуя и, что для меня весьма важно, полностью оторвана от унылого Qt Api с его унылым MVC.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 21.10.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(djamshud @  21.10.2010,  15:59 Найти цитируемый пост)
прослойка DOM-построения гуя в рантайме (обычно забивается через скриптуемый конфиг, но управлять можно и программно)

об этом подробней пожалуйста.

Цитата(djamshud @  21.10.2010,  15:59 Найти цитируемый пост)
оторвана от унылого Qt Api с его унылым MVC. 

я уже начал соглашаться с тем, что я один это понимаю... аа нет, оказывается.
PM WWW   Вверх
mes
Дата 21.10.2010, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(djamshud @  21.10.2010,  14:59 Найти цитируемый пост)
полностью оторвана от унылого Qt Api с его унылым MVC. 

Цитата(boostcoder @  21.10.2010,  15:04 Найти цитируемый пост)
я уже начал соглашаться с тем, что я один это понимаю... аа нет, оказывается. 

мне как непонимающему, покажите, плиз, не унылую GUI- библиотеку .. или хотя бы объективно лучшую чем Qt..





--------------------
PM MAIL WWW   Вверх
djamshud
Дата 21.10.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



boostcoder, грубо говоря выстраиваю XML-дерево описания гуя программы. Его можно построить динамически, а можно вытянуть из конфига, например такого:

Код

<window title="wtitle">
<table src="src_id" id="table_id">
<!--src - это источник данных, src_id - идентификатор этого источника, так организуется интерфейс обмена данными между уровнями-->
<!--Источником может быть таблица БД, файл или просто результаты каких-нибудь расчетов, которые будут вноситься по мере вычисления-->

<!--Тут еще описание столбов...-->
</table>
<button title="btitle" onclick="$(insert table_id, hello, world)" /> <!--хелло с ворлдом естествено вполне можно взять откуда-нибудь динамически-->
</window>



--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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