LINUX.ORG.RU

[Qt] Что возвращает QModelIndex::row() ?

 


0

1

Здравствуйте!

Что-то у меня туго с английским. Не могу понять, что тут конкретно написано:

int QModelIndex::row () const
Returns the row this model index refers to.

Имеется в виду, что будет возвращен номер строки, на которой находится данный QModelIndex? То есть, если имеем дерево

usel_1
|
+-- usel_2
+-- usel_3

то для узла usel_2 метод row() вернет 0? А для узла usel_3 метод row() вернет 1?

Или имеется в виду что-то другое?


Точно не помню, но вроде бы для узла1 будет 0, для 2 будет 1 и тд.

zJes ★★
()

Да, QModelIndex::row() - номер строки относительно родителя. Начинаются строки и колонки с нуля.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Блин, почему тогда у меня сегфолт в removeRows() в таком вот коде?

void TreeScreen::del_one_branch(QModelIndex index)
{
 if(!index.isValid()) return;

 TreeModel->removeRows(index.row(), 1, index.parent());
}

(В метод передается QModelIndex элемента, который надо удалить).

xintrea
() автор топика
Ответ на: комментарий от xintrea

Трейс? Ибо есть сомнения, The QAbstractItemModel implementation of removeRows() does nothing.

zJes ★★
()
Ответ на: комментарий от Dendy

> Откуда у вас этот index берётся?

Первый элемент из списка

QModelIndexList selectitems=KnowTree->selectionModel()->selectedIndexes();


Покажите весь код.


Он слишком большой, я показываю только то, что имеет значение к задаче.

xintrea
() автор топика
Ответ на: комментарий от rival

Залажал с реализацией removeRows?

Реализация как в учебнике:

bool TreeModel::removeRows(int position, int rows, const QModelIndex &parent)
{
TreeItem *parentItem = getItem(parent);
bool success = true;

beginRemoveRows(parent, position, position + rows - 1);
success = parentItem->removeChildren(position, rows);
endRemoveRows();

return success;
}
xintrea
() автор топика
Ответ на: комментарий от xintrea

Всё что приходит в голову - убедитесь, что список не пуст. Остальное нужно смотреть в отладчике. Если QModelIndex был сохранён во внешней переменной и подставлен после того, как стек вызовов вернулся до вызова KnowTree->selectionModel()->selectedIndexes() - этот индекс уже будет невалиден и попытка привести его QModelIndex::internalPointer() может вызвать падение. Хотя вы это наверное и так знаете.

Dendy ★★★★★
()
Ответ на: комментарий от xintrea

>Блин, почему тогда у меня сегфолт в removeRows() в таком вот коде?

А что говорит отладчик?

Pavval ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.