Название: Нужность моделей в неграфических приложениях Отправлено: DarkHobbit от Ноябрь 03, 2016, 10:12 Добрый день.
Как считаете, может ли быть польза от Qt-шных моделей в неграфических приложениях (утилиты командной строки, серверы)? В принципе, я смотрю, QAbstractTableModel, как и её предок - QAbstractItemModel - являются частью QtCore. Наверное, так сделано неспроста Конкретный пример. У меня сейчас есть проект, в котором написано довольно много кода. До релиза ещё далеко, но поскольку я старался писать аккуратно и не валить всё в кучу, уже примерно выявилось, какие модули зависят от GUI, какие нет. И захотелось мне его структурировать примерно по такому принципу:
Просьба не спрашивать, "зачем тебе виджеты в 2016 году", "зачем тебе QML, если на виджетах и так работает", "зачем мне всё это нужно, ведь можно сразу сделать один вариант и не париться". Просто хочу сделать максимально логично и красиво. А вот как максимально логично - пока не решил. Проект пишется для себя, менеджеров над головой нет, сроки не парят :) Название: Re: Нужность моделей в неграфических приложениях Отправлено: gil9red от Ноябрь 03, 2016, 10:28 Модель содержит данные, а не отображает их, поэтому логично что в core.
Название: Re: Нужность моделей в неграфических приложениях Отправлено: DarkHobbit от Ноябрь 03, 2016, 10:35 С одной стороны - да, так оно и есть. С другой я пока не очень вижу, чем класс модели (в Qt-шном понимании) для задач, отличных от отображения, может пригодиться больше, чем структура, которую она использует внутри себя (допустим, там QList из структур...).
Название: Re: Нужность моделей в неграфических приложениях Отправлено: ssoft от Ноябрь 03, 2016, 14:21 С одной стороны - да, так оно и есть. С другой я пока не очень вижу, чем класс модели (в Qt-шном понимании) для задач, отличных от отображения, может пригодиться больше, чем структура, которую она использует внутри себя (допустим, там QList из структур...). Модель предоставляет предопределенный интерфейс для взаимодействия с ней. Таким образом одна модель может быть подменена любой другой. Внутренняя структура становится неважной - в списках, в других видах коллекций или в БД данные находятся - все равно. Если использовать конкретную структуру хранения "(допустим, там QList из структур...)", то всегда будете работать только с ней. Название: Re: Нужность моделей в неграфических приложениях Отправлено: DarkHobbit от Ноябрь 03, 2016, 14:34 Таким образом одна модель может быть подменена любой другой. В моей задаче, IMHO, с гораздо большей вероятностью может появиться другой View с той же Model, чем другая Model с тем же View. :)Тем не менее, спасибо, убедили, оставляю модель в core. Название: Re: Нужность моделей в неграфических приложениях Отправлено: DarkHobbit от Ноябрь 03, 2016, 15:24 Хм, но при этом QSortFilterProxyModel (да и её предок QAbstractProxyModel) - часть уже QtGui, а не QtCore...
Хотя это относится Qt4, в Qt5 уже перенесли в QtCore. Название: Re: Нужность моделей в неграфических приложениях Отправлено: DarkHobbit от Ноябрь 04, 2016, 19:08 И всё-таки не всё срастается...
Если в модели я использую Qt::BackgroundRole, то через него надо возвращать QBrush, который таки является частью QtGui. Получается, что сами модели хоть и определены в QtCore, но при этом в программах без QtGui могут использоваться только при определённых ограничениях. Всё же это не совсем модель в понимании MVC... Название: Re: Нужность моделей в неграфических приложениях Отправлено: Bepec от Ноябрь 04, 2016, 20:40 Цитировать QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const. Он возвращает QVariant, а не brush или иное. Модель может отдавать ВСЁ ЧТО УГОДНО, что напишете то и отдаст. Начиная от int заканчивая псевдографикой. Модель - это контейнер, непривязанный к типу данных. Можно любые данные запихать, менять на лету и подставлять. Тот же ls или dir в принципе могут использовать модель для вывода в консоль. Это инструмент, а вот как вы его используете - ваше дело. Название: Re: Нужность моделей в неграфических приложениях Отправлено: DarkHobbit от Ноябрь 04, 2016, 21:38 Он возвращает QVariant, а не brush или иное. Модель может отдавать ВСЁ ЧТО УГОДНО, что напишете то и отдаст. Начиная от int заканчивая псевдографикой. Я в курсе. И всё-таки, как я понимаю, Qt::BackgroundRole предполагает, что через QVariant возвращается именно QBrush.Тогда, наверное, самый универсальный вариант - это сделать две модели. Одна, предок, работает только на текст, а внутренние структуры у неё protected. Другая - потомок, не гнушается и QtGui. В моём случае я вряд ли буду так делать (тут это "слишком правильно"), но в более навороченных может пригодиться... Название: Re: Нужность моделей в неграфических приложениях Отправлено: Old от Ноябрь 04, 2016, 21:59 В моём случае я вряд ли буду так делать (тут это "слишком правильно"), но в более навороченных может пригодиться... Лучше относится к Qt-моделям как к некоторым адаптерам между вашими данными и Qt-view. С их помощью view может отображать ваши данные, которые хранятся в своих структурах. |