Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Неверный QModelIndex
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
ruzik
Здравствуйте у меня есть следующая строка:
QModelIndex newIndex = itemModel->index(0,0,index);

index полностью валиден, имеет ненулевые(не равные -1) столбец и строку, но newIndex получается почему-то невалидный, почему это может быть?
Заранее спасибо!
ViGOur
Он может быть и валидный, но по всей видимости без детный! :)

Цитата
index() Передавая модельный индекс родительского элемента, эта функция разрешает представлениям и делегатам обращаться к дочерним элементам этого элемента. Если не найдено допустимого дочернего элемента - соответствующего указанным строке, столбцу и родительскому модельному индексу, функция должна вернуть QModelIndex(), который является ошибочным модельным индексом.


Отюда: Создание собственных моделей - Родители и дети
ruzik
Прочитал, но так, к сожалению и не понял как все исправить
+
Цитата
Он может быть и валидный, но по всей видимости без детный!

При отладке можно заметить что показатель row и column newIndex равны -1
Sokoloff
Цитата(ruzik @ 25.1.2012, 15:09) *
Здравствуйте у меня есть следующая строка:
QModelIndex newIndex = itemModel->index(0,0,index);

index полностью валиден, имеет ненулевые(не равные -1) столбец и строку, но newIndex получается почему-то невалидный, почему это может быть?
Заранее спасибо!


QModelIndex newIndex = itemModel->index(0,0,index);
возвращает индекс ребенка. Возможно у этого валидного index-а нет детей. Если тебе нужен индекс на этом же уровне, используй
QModelIndex newIndex = itemModel->index(0,0,index.parent());

ruzik
В том и прикол, что нужно не на том же уровне надо а на нижнем, то бишь именно так

Если будет удобней, то вот вся функция с ей вызовом(используется для распарсивания xml)
RizekFaster::RizekFaster(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    setupUi(this);

    QDomDocument domDoc;
    QFile file(":/RizekFaster/data.xml");

    itemModel = new QStandardItemModel(0,1);
    dataTreeView->setModel(itemModel);
    if(file.open(QIODevice::ReadOnly))
    {
        if(domDoc.setContent(&file))
        {
            QDomElement domElement = domDoc.documentElement();
            traverseNode(domElement);
        }
        file.close();
    }
}
void RizekFaster::traverseNode(const QDomNode& node, QModelIndex& index)
{
    int count = 0;
    QDomNode domNode = node.firstChild();
    while(!domNode.isNull())
    {
        if(domNode.isElement())
        {
            QDomElement domElement = domNode.toElement();
            if(!domElement.isNull())
            {
                if(domElement.tagName() == "folder")
                {
                    itemModel->insertRow(count,index);
                    QModelIndex newIndex = itemModel->index(count,0,index);
                    itemModel->setData(newIndex,domElement.attribute("name",tr("New folder")));
                    count++;
                    traverseNode(domElement,newIndex);
                }
                if(domElement.tagName() == "item")
                {
                    itemModel->insertRow(count,index);
                    QModelIndex newIndex = itemModel->index(count,0,index);
                    itemModel->setData(newIndex,domElement.text());
                    count++;
                }
            }
        }
        domNode = domNode.nextSibling();
    }
}
ruzik
И сама XMl'ка
<?xml version="1.0" encoding="UTF-8"?>
<data>
<item>C:/Qt</item>
<folder name="Friends">
   <item>C:/Qt1</item>
   <item>C:/Qt2</item>
</folder>
<item>C:/Qt3</item>
</data>


То есть в этой строке:
QModelIndex newIndex = itemModel->index(count,0,index);
index указывает на папку Friends, эта ячейка реально существует и отображается в таблице и поначалу у неё нет детей, то есть она просто ячейка, а потом по смыслу они должны добавляется этим кодом:
itemModel->setData(newIndex,domElement.text());

Сами итемы в нужное место добавляются нормально
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.