Russian Qt Forum

Qt => Вопросы новичков => Тема начата: virtual_root от Август 20, 2012, 16:53



Название: Проблема с QModelIndex
Отправлено: virtual_root от Август 20, 2012, 16:53
Добрый вечер ребята. У меня следующий вопрос: Создаю дерево с любым уровнем вложенности. В каждый QStandartItem в data ложу id эелемента который отображаю. Проблема в следующем: обрабатываю событие клика по узлу дерева. Если я кликаю по верхнему уровню, то через QModelIndex могу получить QStandartItem и из него его данные. Если кликаю по внутреннему узлу, то он мне всё равно возвращает самый верхний родитель узла, а мне нужно у кликнутого узла получить id. Почему QModelIndex возвращает номера строк и столбцов(я через них получаю QStandartItem ) только верхнего уровня? Как мне добраться до внутренних узлов? Подскажите ребята!
Прилагаю код:
Код
C++ (Qt)
void Widget::on_treeView_clicked(const QModelIndex &index)
{
    qDebug()<<groups->GetGroupID(index);
}

Код
C++ (Qt)
int Groups::GetGroupID(QModelIndex index){
   QStandardItem *item = _model->item(index.row(),index.column());
   qDebug()<<index.row()<<index.column();
   return  item->data().toInt();
}


Название: Re: Проблема с QModelIndex
Отправлено: Странник от Август 20, 2012, 23:17
parent не передаете, следовательно и получаете элемент верхнего уровня. надо так:
Код:
QStandardItem *item = _model->itemFromIndex(index);

а еще корректнее будет вот так:
Код:
int Groups::GetGroupID(const QModelIndex &index)
{
    return  index.data().toInt();
}


Название: Re: Проблема с QModelIndex
Отправлено: trot от Август 21, 2012, 07:43
Это вы думаете, что получает номер строки и столбца верхнего уровня. На самом деле вы получаете то что надо. В дереве нет сквозной нумерации, каждый уровень нумеруется с нуля, а чтобы понять какой уровень вы обрабатываете, то необходимо учитывать parent, то что вы не делаете.


Название: Re: Проблема с QModelIndex
Отправлено: virtual_root от Август 21, 2012, 10:22
спасибо ребята!