Russian Qt Forum
Сентябрь 30, 2024, 16:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: извлечение данных из айтемов, находящихся в списках QList<QStandardItem*>  (Прочитано 7224 раз)
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++
Записан
Вячеслав
Гость
« Ответ #1 : Февраль 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 )
правильнее будет ?
Записан
Karl-Philipp
Гость
« Ответ #2 : Февраль 27, 2008, 14:03 »

...

Тобишь столбец из модели убиваеться нафиг Подмигивающий

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


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

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


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

не думаю, что это подойдет. У меня задача такого плана: выявлять одинаковые столбцы в модели, поэтому сравнивать я хочу два списка, получаемых из двух соседних колонок модели.
« Последнее редактирование: Февраль 27, 2008, 14:12 от terlan » Записан
Вячеслав
Гость
« Ответ #3 : Февраль 27, 2008, 14:13 »

1) Что считаеться одинаковыми столбцами  ?
2) Может логичнее сначала проверить, а потом удалить ?
3) data() требует параметр ... Тебе скорее всего нужен Qt::DisplayRole или Qt::EditRole
4) И y QStandardItem'а text() вроде водиться ......
Записан
Karl-Philipp
Гость
« Ответ #4 : Февраль 27, 2008, 14:29 »

1) Что считаеться одинаковыми столбцами  ?
столбцы с одинаковыми данными (по строчкам) (например, А1 == А2).

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

4) И y QStandardItem'а text() вроде водиться ......
а вот это наверное, то, что нужно (вместо data()) и роли не нужно будет использовать Улыбающийся
Записан
Karl-Philipp
Гость
« Ответ #5 : Февраль 27, 2008, 14:39 »

хорошо, что text() у QStandardItem водится  Улыбающийся получилось
Спасибо, большое, Вячеслав!

p.s. а с data() таки буду разбираться
Записан
Вячеслав
Гость
« Ответ #6 : Февраль 27, 2008, 14:40 »

Удачи ж)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Февраль 27, 2008, 14:53 »

Как уже говорил Вячеслав, по умолчанию параметром для data() выступает Qt::UserRole + 1, поэтому у тебя data() ничего не возвращает, т.к. эта роль, предположительно, не определена в моделе. Передавай параметром другую роль, например data(Qt::DisplayRole). И почитай также про другие роли в ассистанте (enum Qt::ItemDataRole )

Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Karl-Philipp
Гость
« Ответ #8 : Февраль 27, 2008, 14:58 »

Как уже говорил Вячеслав, по умолчанию параметром для data() выступает Qt::UserRole + 1, поэтому у тебя data() ничего не возвращает, т.к. эта роль, предположительно, не определена в моделе. Передавай параметром другую роль, например data(Qt::DisplayRole). И почитай также про другие роли в ассистанте (enum Qt::ItemDataRole )



заработало и data() c ролью Qt::DisplayRole. И Вам, pastor, большое спасибо Улыбающийся читаю про роли
Записан
ритт
Гость
« Ответ #9 : Февраль 28, 2008, 02:04 »

гы...текст() - это и есть дата(КуТэ::ДисплейРоле)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 23.