Russian Qt Forum
Ноябрь 22, 2024, 15:12
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
Старое дерево
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Старое дерево (Прочитано 8230 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Старое дерево
«
:
Октябрь 26, 2018, 12:23 »
Добрый день
Продолжаю переделывать то самое обширное старое дерево (что в прошлый раз обозвал "таблицей"). Решил классы Qt не привлекать, слишком много всякого кастомного которого в Qt не видел.
Ну ладно, решил по крайней мере выделить "модель" как отдельный класс/сущность, которая к UI не имеет отношения. Раньше был один класс Layout (синглтон) с более чем 300 методами. Разбил его на два: LayoutData (модель) и LayoutView (вьюха). Результат - по меньшей мере 3/4 ф-ционала перекочевало во вьюху, она тоже стала синглтоном и др части приложения (активно) общаются с ней. А собсно "модель" выходит как бы никому и не нужна, получается только вью ее и знает.
Хорошо ли это или наоборот, типа "тревожный симптом"?
Спасибо
Записан
RedDog
Частый гость
Offline
Сообщений: 221
Re: Старое дерево
«
Ответ #1 :
Октябрь 26, 2018, 13:34 »
Модель о вьюхе по хорошему знать ничего не должна, потому как сегодня это кутишный виджет (к примеру), а завтра это веб-морда.
Модель должна предоставлять апи, которое будет дергать абстрактная вьюха с одной стороны, а с другой модель "наполняет" данными бизнес логика.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Старое дерево
«
Ответ #2 :
Октябрь 26, 2018, 14:00 »
мы когданибуть увидим это великое дерево ?
приличные люди примеры (мини проект) на гитхаб выкладывают )
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Старое дерево
«
Ответ #3 :
Октябрь 26, 2018, 17:25 »
А рассказали бы, как это делается))
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Старое дерево
«
Ответ #4 :
Октябрь 28, 2018, 05:51 »
Цитата: qate от Октябрь 26, 2018, 14:00
мы когданибуть увидим это великое дерево ?
приличные люди примеры (мини проект) на гитхаб выкладывают )
Не все проекты open-source, и не всякую вещь можно в карман засунуть, это нормально. Вот дерево (аттач) очень похожее на мое и откуда я заимствую идеи. В ячейку может быть напихано что угодно в зависимости от контекста текущей строки.
Да, и я понимаю что дальше (нездорового) любопытства дело не уйдет
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Старое дерево
«
Ответ #5 :
Октябрь 28, 2018, 06:29 »
Цитата: RedDog от Октябрь 26, 2018, 13:34
Модель о вьюхе по хорошему знать ничего не должна, потому как сегодня это кутишный виджет (к примеру), а завтра это веб-морда.
Модель должна предоставлять апи, которое будет дергать абстрактная вьюха с одной стороны, а с другой модель "наполняет" данными бизнес логика.
Подобные общие соображения очень популярны и выглядят логично. Но так ли это на самом деле?
Модель всегда делается под вьюшку. Какая-то иллюзия общности сохраняется пока исходные данные - контейнер прямого доступа типа вектора. Иначе приходится или копировать данные или согласиться с утверждением что "модель" - вовсе не оригинал и не хранилище данных, это какой-то "навигатор" который позволит вьюхе доползти до первоисточника.
А раз так, то почему мы должны упорно сводить дело к data/setData ? Напр в случае дерева настоять на этом можно создав тучу кастомных "ролей", но единственный смысл в этом - все-таки использовать Qt классы, никакой общностью здесь и не пахнет. Ну а копирование по сути ничего не решает - ведь все равно надо как-то менять оригинал.
Вот такой сценарий: юзер тыкнул мышей, вьюшка разобралась где, с помощью модели нашла оригинал, и.. просто меняет его что часто выливается в солидную операцию (undo, обновление др окон и.т.п). Что здесь плохого? Есть опасность что какой-то ф-ционал (прочно) поселится во вьюшке? Да, за этим надо приглядывать и изменения выносить отдельно. Но переносить это в "модель" - оснований никаких.
Что Вы об этом думаете?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Старое дерево
«
Ответ #6 :
Октябрь 28, 2018, 14:44 »
Цитата: Igors от Октябрь 28, 2018, 06:29
Что Вы об этом думаете?
Что вы не правы=)
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Старое дерево
«
Ответ #7 :
Октябрь 29, 2018, 08:24 »
Цитата: Igors от Октябрь 28, 2018, 05:51
Да, и я понимаю что дальше (нездорового) любопытства дело не уйдет
так ведь это основное )
приведенный пример дерева ужасен по юзабилити
я сам не разберусь, а уж пользователи, которые начинают выть о "сложном" интерфейсе много проще этого дерева, и подавно
они привыкли к простым дизайнам UI смартафоном, которые у всех и несколько кнопок и простая табличка их вводят в уныние
"дай", говорят, "нам одну кнопку, чтобы все делала сразу"
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Старое дерево
«
Ответ #8 :
Октябрь 29, 2018, 09:06 »
Цитата: qate от Октябрь 29, 2018, 08:24
так ведь это основное )
приведенный пример дерева ужасен по юзабилити
Adobe так не считает
И, видимо, многие юзеры тоже, иначе это приложение не было бы одним из лидеров видеомонтажа. Вообще я давно понял - мнить себя великим дизайнером и/или постановщиком не стоит. Человек много работающий с приложением чувствует многие вещи лучше, хотя он и не программист. Вот например что упорно спрашивают уже давно (из-за чего переделки и начались).
- есть окно (наше дерево) в котором список всех 3D объектов сцены. Любой объект можно выключить (крайний левый чекбокс), при этом он не рисуется в др окнах. Все нормуль, во всяком случае корректно. А вот юзер недоволен - неудобно. Да, он может выкл все объекты (Select All + чекбокс) а потом вкл только нужные, но это возня. Ему нужна возможность ткнуть в объект - и только он становится видимым, остальные автоматом выкл и дизаблятся в дереве. На скриншоте выше такая возможность есть, поэтому отвертеться не удалось
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...