QModelIndex newIndex = itemModel->index(0,0,index);
index полностью валиден, имеет ненулевые(не равные -1) столбец и строку, но newIndex получается почему-то невалидный, почему это может быть?
Заранее спасибо!
QModelIndex newIndex = itemModel->index(0,0,index);
QModelIndex newIndex = itemModel->index(0,0,index);
QModelIndex newIndex = itemModel->index(0,0,index);
возвращает индекс ребенка. Возможно у этого валидного index-а нет детей. Если тебе нужен индекс на этом же уровне, используй QModelIndex newIndex = itemModel->index(0,0,index.parent());
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();
}
}
<?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>