Russian Qt Forum
Ноябрь 22, 2024, 17:27
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
Нужность моделей в неграфических приложениях
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Нужность моделей в неграфических приложениях (Прочитано 6393 раз)
DarkHobbit
Самовар
Offline
Сообщений: 197
Нужность моделей в неграфических приложениях
«
:
Ноябрь 03, 2016, 10:12 »
Добрый день.
Как считаете, может ли быть польза от Qt-шных моделей в неграфических приложениях (утилиты командной строки, серверы)? В принципе, я смотрю, QAbstractTableModel, как и её предок - QAbstractItemModel - являются частью QtCore. Наверное, так сделано неспроста
Конкретный пример. У меня сейчас есть проект, в котором написано довольно много кода. До релиза ещё далеко, но поскольку я старался писать аккуратно и не валить всё в кучу, уже примерно выявилось, какие модули зависят от GUI, какие нет. И захотелось мне его структурировать примерно по такому принципу:
core - зависит только от QtCore. Туда пойдут структуры данных, общие процедуры, фильтры для разных форматов данных;
gui - зависит от QtCore и QtGUI. Первоначально хотел всунуть туда модель;
app - приложение, здесь остаётся весь код на виджетах.
Такое разделение, по идее, должно позволить сделать на одной кодовой базе:
прикладную программу на виджетах (использует всё);
прикладную программу на QML (использует core и gui);
консольный конвертор форматов для любителей unix-way (использует core)
В QML я ещё толком не вник, но если правильно понимаю, мой потомок QAbstractTableModel пригодится как для программы на виджетах, так и для QML. Для неграфических программ пользы от модели пока не вижу, просветите, если я не прав (а интуиция, исходя из того, что я читал про MVC, подсказывает, что скорее всего, не прав). Соответственно думаю,
куда же всё-таки сунуть модель
- в core или в gui?
Просьба не спрашивать, "зачем тебе виджеты в 2016 году", "зачем тебе QML, если на виджетах и так работает", "зачем мне всё это нужно, ведь можно сразу сделать один вариант и не париться". Просто хочу сделать максимально логично и красиво. А вот как максимально логично - пока не решил.
Проект пишется для себя, менеджеров над головой нет, сроки не парят
«
Последнее редактирование: Ноябрь 03, 2016, 10:15 от DarkHobbit
»
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Нужность моделей в неграфических приложениях
«
Ответ #1 :
Ноябрь 03, 2016, 10:28 »
Модель содержит данные, а не отображает их, поэтому логично что в core.
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Нужность моделей в неграфических приложениях
«
Ответ #2 :
Ноябрь 03, 2016, 10:35 »
С одной стороны - да, так оно и есть. С другой я пока не очень вижу, чем класс модели (в Qt-шном понимании) для задач, отличных от отображения, может пригодиться больше, чем структура, которую она использует внутри себя (допустим, там QList из структур...).
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
ssoft
Программист
Offline
Сообщений: 584
Re: Нужность моделей в неграфических приложениях
«
Ответ #3 :
Ноябрь 03, 2016, 14:21 »
Цитата: DarkHobbit от Ноябрь 03, 2016, 10:35
С одной стороны - да, так оно и есть. С другой я пока не очень вижу, чем класс модели (в Qt-шном понимании) для задач, отличных от отображения, может пригодиться больше, чем структура, которую она использует внутри себя (допустим, там QList из структур...).
Модель предоставляет предопределенный интерфейс для взаимодействия с ней. Таким образом одна модель может быть подменена любой другой. Внутренняя структура становится неважной - в списках, в других видах коллекций или в БД данные находятся - все равно. Если использовать конкретную структуру хранения "(допустим, там QList из структур...)", то всегда будете работать только с ней.
Записан
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Нужность моделей в неграфических приложениях
«
Ответ #4 :
Ноябрь 03, 2016, 14:34 »
Цитата: ssoft от Ноябрь 03, 2016, 14:21
Таким образом одна модель может быть подменена любой другой.
В моей задаче, IMHO, с гораздо большей вероятностью может появиться другой View с той же Model, чем другая Model с тем же View.
Тем не менее, спасибо, убедили, оставляю модель в core.
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Нужность моделей в неграфических приложениях
«
Ответ #5 :
Ноябрь 03, 2016, 15:24 »
Хм, но при этом QSortFilterProxyModel (да и её предок QAbstractProxyModel) - часть уже QtGui, а не QtCore...
Хотя это относится Qt4, в Qt5 уже перенесли в QtCore.
«
Последнее редактирование: Ноябрь 03, 2016, 15:32 от DarkHobbit
»
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Нужность моделей в неграфических приложениях
«
Ответ #6 :
Ноябрь 04, 2016, 19:08 »
И всё-таки не всё срастается...
Если в модели я использую Qt::BackgroundRole, то через него надо возвращать QBrush, который таки является частью QtGui.
Получается, что сами модели хоть и определены в QtCore, но при этом в программах без QtGui могут использоваться только при определённых ограничениях.
Всё же это не совсем модель в понимании MVC...
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
Bepec
Гость
Re: Нужность моделей в неграфических приложениях
«
Ответ #7 :
Ноябрь 04, 2016, 20:40 »
Цитировать
QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const.
Он возвращает QVariant, а не brush или иное. Модель может отдавать ВСЁ ЧТО УГОДНО, что напишете то и отдаст. Начиная от int заканчивая псевдографикой.
Модель - это контейнер, непривязанный к типу данных. Можно любые данные запихать, менять на лету и подставлять. Тот же ls или dir в принципе могут использовать модель для вывода в консоль. Это инструмент, а вот как вы его используете - ваше дело.
Записан
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Нужность моделей в неграфических приложениях
«
Ответ #8 :
Ноябрь 04, 2016, 21:38 »
Цитата: Bepec от Ноябрь 04, 2016, 20:40
Он возвращает QVariant, а не brush или иное. Модель может отдавать ВСЁ ЧТО УГОДНО, что напишете то и отдаст. Начиная от int заканчивая псевдографикой.
Я в курсе. И всё-таки, как я понимаю, Qt::BackgroundRole предполагает, что через QVariant возвращается именно QBrush.
Тогда, наверное, самый универсальный вариант - это сделать две модели. Одна, предок, работает только на текст, а внутренние структуры у неё protected. Другая - потомок, не гнушается и QtGui.
В моём случае я вряд ли буду так делать (тут это "слишком правильно"), но в более навороченных может пригодиться...
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Нужность моделей в неграфических приложениях
«
Ответ #9 :
Ноябрь 04, 2016, 21:59 »
Цитата: DarkHobbit от Ноябрь 04, 2016, 21:38
В моём случае я вряд ли буду так делать (тут это "слишком правильно"), но в более навороченных может пригодиться...
Лучше относится к Qt-моделям как к некоторым адаптерам между вашими данными и Qt-view. С их помощью view может отображать ваши данные, которые хранятся в своих структурах.
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...