Название: Модель дерева унаследованная от QAbstractItemModel - нужеl Отправлено: Larry от Январь 28, 2011, 16:24 Добрый день! Я хотел бы узнать, как ПРАВИЛЬНО создать свою модель дерева на основе QAbstractItemModel. Как правильно ее заполнять, обновлять, добавлять данные и т.д. и т.п. На данный момент у меня есть модель, но я считаю что она неправильно создана. Суть этой модели: отображать данные,которые находятся в таблицах бд. Модель сделал на основе примера тролей simpletreemodel. Добавление данных идет не через модель, а напрямую в бд. Одним словом я уже запутался и хочу попросить совета как правильно создать эту модель дерева, чтобы можно было не химичить потом с обновлением и т.д. Помогите пожалуйста советом...
Название: Re: Модель дерева унаследованная от QAbstractItemModel - нужен совет Отправлено: UVV от Январь 28, 2011, 16:37 Что значит добавление идёт напрямую в БД? Оно происходит где-то вне твоей программы?
Название: Re: Модель дерева унаследованная от QAbstractItemModel - нужен совет Отправлено: Larry от Январь 28, 2011, 16:41 в программе, но вне модели...данные пользователь вбивает в форму(диалоговое окно), а там уже идет и добавление в бд...мне говорили что это неправильно...при этом возникают проблемы при обновлении данных...
Название: Re: Модель дерева унаследованная от QAbstractItemModel - нужен совет Отправлено: shirushizo от Январь 28, 2011, 16:57 1. Переопределить методы QAbstractItemModel для возможности редактирования
Код: bool insertRow ( int row, const QModelIndex & parent = QModelIndex() ) 3. Ну и сделать кнопки добавить/удалить Сама структура дерева в том примере нормально описана. А вот насчет обновления модели при изменении БД (многопользовательское редактирование) самому интересно) Название: Re: Модель дерева унаследованная от QAbstractItemModel - нужен совет Отправлено: Larry от Январь 28, 2011, 17:08 у меня не редактируемая модель...если надо отредактировать, то вызывается диалог в котором это и происходит(правда до этого я еще не дошел:))...т.е добавление данных делать через методы insertRow/s и setData?
Название: Re: Модель дерева унаследованная от QAbstractItemModel - нуже& Отправлено: Larry от Январь 28, 2011, 17:16 обновление делаю вызывая метод setupModelData()(в нем происходит занесение данных в модель), но не могу избавиться от бока, записи дублируются...пока не могу его убрать...
Название: Re: Модель дерева унаследованная от QAbstractItemModel - нуже& Отправлено: shirushizo от Январь 29, 2011, 10:09 у меня не редактируемая модель...если надо отредактировать... :DТвой диалог можно сделать редактором делегата, при закрытии которого как раз и будут вызываться переопределенные методы. Эти методы сделаны стандартизации работы модели. Т.е. делегату не важно в каком виде ты хранишь данные в модели и как в нее записывать данные так же, как и представлению. у QItemDelegate за редактирование отвечают 3 метода Код: //Создание виджета-редактора Вот кусок реализации: Код: void QItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const Название: Re: Модель дерева унаследованная от QAbstractItemModel - нужен совет Отправлено: Larry от Январь 29, 2011, 12:09 Спасибо за подсказку так и поступлю, а потом отпишусь, что получилось...
Название: Re: Модель дерева унаследованная от QAbstractItemModel - нужен совет Отправлено: trot от Январь 29, 2011, 17:19 Предлагается следующие решение, опробаванное на практике.
1. Создаешь класс для хранения данных получаемых из БД. Методы данного класса будут отвечать за выполнения операций с БД (чтение, редактирование, вставка и удаление). Этот же класс будет генерить ту или иную модель (дерево, таблица, выпадающий список) в зависимость от требований к представлению. 2. Создаешь класс модели, который является посредником между представлением и твоим классом работы с БД. В итоге получается четырех уровневая логика работы с данными - представление-модель-источник_данных-база_данных. Название: Re: Модель дерева унаследованная от QAbstractItemModel - нужен совет Отправлено: Larry от Январь 29, 2011, 18:13 спасибо, мысля такая возникала, но отбросил,..подумал что не справлюсь...хотя стоит попробовать:)
|