Russian Qt Forum

Qt => Model-View (MV) => Тема начата: mokynis от Октябрь 16, 2017, 15:10



Название: можно ли изменить переменную класса в model::data() ?
Отправлено: mokynis от Октябрь 16, 2017, 15:10
имеется класс
Код:
class orderList : public QSqlQueryModel
в нем переменная tek_row. нужно, чтобы она менялась в зависимости от index.row() в
Код:
QVariant orderList::data(const QModelIndex &index,int role) const
Это возможно? Сделать это "в лоб" не удается-пишет
Код:
assignment of member 'orderList::tek_row' in read-only object
         this->tek_row=index.row();
я ведь меняю не элементы data(), а public-переменную...


Название: Re: можно ли изменить переменную класса в model::data() ?
Отправлено: __Heaven__ от Октябрь 16, 2017, 15:22
для изменения переменных класса в его константных методах необходимо применять mutable перед объявлением переменной.
Но, действительно ли оно вам так нужно?


Название: Re: можно ли изменить переменную класса в model::data() ?
Отправлено: mokynis от Октябрь 16, 2017, 15:26
в методе data() идет нудный расчет трех отображаемых полей с несколькими запросами к базе. Хотелось, чтобы этот пересчет делался только при изменении данных, а не каждый раз, когда юзер ткнет в форму мышкой


Название: Re: можно ли изменить переменную класса в model::data() ?
Отправлено: __Heaven__ от Октябрь 16, 2017, 16:08
Возможно этот пересчёт можно перенести в метод setData?


Название: Re: можно ли изменить переменную класса в model::data() ?
Отправлено: nvek от Ноябрь 17, 2017, 05:40
то-есть получается, что у тебя, когда вызывается метод data, в этом методе происходят уберсложные расчеты?


Название: Re: можно ли изменить переменную класса в model::data() ?
Отправлено: Павелъ от Ноябрь 22, 2017, 15:15
то-есть получается, что у тебя, когда вызывается метод data, в этом методе происходят уберсложные расчеты?

Ничего сложного не происходит.

Просто, там можно подать в качестве аргумента Qt:SortOrder. А я бы хотел, как в qSort lambda-функцию. Там дочерние приемы, в качестве текста записаны ип-адреса. Я откусываю последние цифры после точки. Привожу к инту и сравниваю.

Вот, что я хочу сделать.

Можно конечно самому реализовать сортировку. Но, зачем изголяться с пузырьком или вставкой, когда умные дядьки-программисты до меня уже сделали нормальные алгоритмы сортировки.

Вопрос: можно как-то вместо sortorder подать что-то типа lessThan в sortChildren?