Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Izi от Июль 18, 2015, 03:13



Название: QModelIndex()
Отправлено: Izi от Июль 18, 2015, 03:13
Доброго времени суток.
У меня есть вопрос. Для чего указывают QModelIndex() в аргументах функции??
К примеру:
Код
C++ (Qt)
QModelIndex index = pModel->index(2, 5, QModelIndex());
QVariant value = pModel->data(index);
 
В документации написано:
QModelIndex::QModelIndex ()
Creates a new empty model index. This type of model index is used to indicate that the position in the model is invalid.

Но зачем тогда передавать в функцию конструктор QModelIndex и создавать пустой индекс, если мы и так создаем индекс??
Код
C++ (Qt)
QModelIndex [b]index[/b] = pModel->index(2, 5, QModelIndex());

Спасибо.


Название: Re: QModelIndex()
Отправлено: Авварон от Июль 18, 2015, 10:41
Это родитель.


Название: Re: QModelIndex()
Отправлено: Izi от Июль 18, 2015, 13:58
Это родитель.

Спасибо. А зачем так сделано? Что-то логики не пойму. И зачем указывать родителя, если мы из конкретной модели и берем индексы row и column?


Название: Re: QModelIndex()
Отправлено: Авварон от Июль 18, 2015, 13:59
Затем, что модели бывают деревянные.


Название: Re: QModelIndex()
Отправлено: Izi от Июль 18, 2015, 14:05
А, понял, QTree* ,а там зачем тогда указывать QModelIndex()?


Название: Re: QModelIndex()
Отправлено: Igors от Июль 18, 2015, 15:00
А, понял, QTree* ,а там зачем тогда указывать QModelIndex()?
Лучше сначала доку открыть, тогда и в "почемучку" играть не придется
Цитировать
QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex & parent = QModelIndex()) const
parent - прозрачный намек что возвращаемый индекс может быть дочерним в дереве. Также есть значение по умолчанию - тогда возвращается индекс верхнего уровня.


Название: Re: QModelIndex()
Отправлено: Izi от Июль 18, 2015, 15:47
Спасибо за ответ!

Получается в этом случае вернется индекс верхнего уровня.
Код
C++ (Qt)
QModelIndex index = pModel->index(2, 5, QModelIndex());
QVariant value = pModel->data(index);

А в другом случае что туда писать? что-то понять никак не могу...
вот к примеру, есть модель:
Код
C++ (Qt)
   QList<int> list;
   list<<24<<11<<43;
 
   QVariant var=QVariant::fromValue(list);
 
   QStandardItemModel *model=new QStandardItemModel;
   for(size_t i(0);i<list.count();i++)
   {
       QStandardItem *itm=new QStandardItem;
       QVariant v=list.at(i);
       itm->setData(v.toInt(),Qt::DisplayRole);
       model->setItem(i,itm);
   }
   QModelIndex index=mod->index(0,0);
   qDebug()<<index.data();
 
И дебаг нормально отображает элемент.

А что тогда ещё можно туда передать в качестве parent? Кроме QModelIndex().


Название: Re: QModelIndex()
Отправлено: Old от Июль 18, 2015, 15:52
Почитайте наконец документацию: http://doc.qt.io/qt-4.8/model-view-programming.html
Там все с картинками на пальцах обьясняется.


Название: Re: QModelIndex()
Отправлено: Izi от Июль 18, 2015, 16:02
Все, понял, спасибо! :)