Russian Qt Forum

Qt => Model-View (MV) => Тема начата: boobsik от Август 15, 2009, 19:06



Название: QAbstractItemModel обновить данные в отображении
Отправлено: boobsik от Август 15, 2009, 19:06
унаследовал QAbstractItemModel.. я изменил данные в элементе, который соответствует ряду(row), как обновить данные в компоненте, который отображает данные? в данном случае компонент QTreeView.. (присоединил модель с помощью setModel(QAbstractItemModel* model))


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: Rcus от Август 15, 2009, 19:10
А документацию по моделям уже читали? И пропустили описания сигналов? Советую вернуться и дочитать.


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: boobsik от Август 15, 2009, 19:16
а разве отображение само не коннектит сигнал обновления? при установке новой модели?


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: Rcus от Август 15, 2009, 19:24
/*sigh*/ Коннектит, но вы используете своего наследника QAbstractItemModel, а потому и вызов сигнала dataChanged нужно самому писать.
P.S. ушел.


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: boobsik от Август 15, 2009, 19:28
dataChanged не виртуальный сигнал, смысл писать свой? сорри, понял) спасибо!)


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: f-r-o-s-t от Август 15, 2009, 19:35
вызов сигнала dataChanged нужно самому писать.

dataChanged не виртуальный сигнал, смысл писать свой?

Писать и вызывать разные вещи. Попробуй emit dataChanged...


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: boobsik от Август 15, 2009, 19:37
я могу сделать emit dataChanged(...) вне компонента?


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: f-r-o-s-t от Август 15, 2009, 19:40
я могу сделать emit dataChanged(...) вне компонента?

Нет... а что компонента сама не знает что её меняют ?=)


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: boobsik от Август 15, 2009, 20:36
ну допустим модель данных незнает) меняю только обьект отвечающий за ряд(row).. и как будет выглядеть фунция, которая эмитит dataChange внутри унаследованного от QAbstractItemModel класса? Нужна функция update, которая обновляет всю модель, но я не понимаю, какие QModelIndex надо в dataChange(...) засунуть?
создал метод в унаследованной модели данных
void MLDataModel::update(){
    emit dataChanged(index(0,0), index(2,1));
}
но после его выполнения добавленный третий ряд в QTreeView не отображается =(


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: BRE от Август 15, 2009, 20:40
но после его выполнения добавленный третий ряд в QTreeView не отображается =(
А про эти сигналы QAbstarctItemModel читал?  ;)
void rowsAboutToBeInserted ( const QModelIndex & parent, int start, int end )
void rowsAboutToBeRemoved ( const QModelIndex & parent, int start, int end )
void rowsInserted ( const QModelIndex & parent, int start, int end )
void rowsRemoved ( const QModelIndex & parent, int start, int end )


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: f-r-o-s-t от Август 15, 2009, 20:43
Всю модель может и reset обновить =)

А в dataChange(...) надо просто передать место изменения.

Простите, но я наверное лучше покину топик =)


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: boobsik от Август 15, 2009, 20:46
алилуя!)) спасибо frost)


Название: Re: QAbstractItemModel обновить данные в отображении
Отправлено: f-r-o-s-t от Август 15, 2009, 20:52
алилуя!)) спасибо frost)

Я думал тебе надо только место изменения обновить.
На здоровье =)