Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Karl-Philipp от Февраль 27, 2008, 13:39



Название: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: Karl-Philipp от Февраль 27, 2008, 13:39
здравствуйте,
есть модель QStandardItem, данные отображаются в таблице.
Мне нужно извлекать данные из модели с помощью takeColumn(int i) и data().
Вот как я это представляю:
Код:
...
QList<QStandardItem*> firstColumnToCheck = model->takeColumn(i);
QList<QStandardItem*>::iterator firstColumnToCheckIterator = firstColumnToCheck.begin();
//дальше мне нужно данные из списка сравнивать
if((*firstColumnToCheckIterator)->data() == a) {...}
...

но данные с помощью data() почему-то не извлекаются.
Подскажите, пожалуйста, где ошибка?

использую Qt 4.2.3 и компилятор VC++


Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: Вячеслав от Февраль 27, 2008, 13:49
А собственно чего хотим ?
Выцепить данные из модели ? Тогда ой ;)
Цитировать
QList<QStandardItem *> QStandardItemModel::takeColumn ( int column )
Removes the given column without deleting the column items, and returns a list of pointers to the removed items. The model releases ownership of the items. For items in the column that have not been set, the corresponding pointers in the list will be 0.

Тобишь столбец из модели убиваеться нафиг ;)
Далее data()  по умолчанию возвращает  Qt::UserRole + 1  - В модели эта роль описана ?
А может это
Код:
QList<QStandardItem *> QStandardItemModel ::findItems ( const QString & text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0 )
правильнее будет ?


Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: Karl-Philipp от Февраль 27, 2008, 14:03
...

Тобишь столбец из модели убиваеться нафиг ;)

убивается, но список указателей на айтемы возвращается и к ним же можно добраться с помощью указателя (итератора)?


Далее data()  по умолчанию возвращает  Qt::UserRole + 1  - В модели эта роль описана ?

 :-[ не знаю, как описать эту роль в модели. Сейчас покопаюсь в примрах.


А может это
Код:
QList<QStandardItem *> QStandardItemModel ::findItems ( const QString & text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0 )
правильнее будет ?

не думаю, что это подойдет. У меня задача такого плана: выявлять одинаковые столбцы в модели, поэтому сравнивать я хочу два списка, получаемых из двух соседних колонок модели.


Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: Вячеслав от Февраль 27, 2008, 14:13
1) Что считаеться одинаковыми столбцами  ?
2) Может логичнее сначала проверить, а потом удалить ?
3) data() требует параметр ... Тебе скорее всего нужен Qt::DisplayRole или Qt::EditRole
4) И y QStandardItem'а text() вроде водиться ......


Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: Karl-Philipp от Февраль 27, 2008, 14:29
1) Что считаеться одинаковыми столбцами  ?
столбцы с одинаковыми данными (по строчкам) (например, А1 == А2).

2) Может логичнее сначала проверить, а потом удалить ?
я, наверное, нечетко написал, что я хочу  :-[
По окончанию работы с программой, у меня создается xml документ, в котором сохраняется структура модели: если колонки одинаковые, то я создаю тег с названием колонки и с параметром (количество). Под количеством понимаю число одинаковых (по данным) колонок.
По сути мне не нужна модель уже, я просто сохраняю данные из нее. (создаю QDomDocument) и сохраняю его в файл xml.
3) data() требует параметр ... Тебе скорее всего нужен
Qt::DisplayRole или Qt::EditRole
спасибо большое, сейчас буду пробовать.

4) И y QStandardItem'а text() вроде водиться ......
а вот это наверное, то, что нужно (вместо data()) и роли не нужно будет использовать :)


Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: Karl-Philipp от Февраль 27, 2008, 14:39
хорошо, что text() у QStandardItem водится  :) получилось
Спасибо, большое, Вячеслав!

p.s. а с data() таки буду разбираться


Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: Вячеслав от Февраль 27, 2008, 14:40
Удачи ж)


Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: pastor от Февраль 27, 2008, 14:53
Как уже говорил Вячеслав, по умолчанию параметром для data() выступает Qt::UserRole + 1, поэтому у тебя data() ничего не возвращает, т.к. эта роль, предположительно, не определена в моделе. Передавай параметром другую роль, например data(Qt::DisplayRole). И почитай также про другие роли в ассистанте (enum Qt::ItemDataRole )



Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: Karl-Philipp от Февраль 27, 2008, 14:58
Как уже говорил Вячеслав, по умолчанию параметром для data() выступает Qt::UserRole + 1, поэтому у тебя data() ничего не возвращает, т.к. эта роль, предположительно, не определена в моделе. Передавай параметром другую роль, например data(Qt::DisplayRole). И почитай также про другие роли в ассистанте (enum Qt::ItemDataRole )



заработало и data() c ролью Qt::DisplayRole. И Вам, pastor, большое спасибо :) читаю про роли


Название: Re: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>
Отправлено: ритт от Февраль 28, 2008, 02:04
гы...текст() - это и есть дата(КуТэ::ДисплейРоле)