Доброго времени суток!Продолжаю разбираться с возможностью записи-чтения XML.
Есть такой код, корявенький, но работает так, как мне нужно:
void MainWindow::openFile()
{
QString filePath = QFileDialog::getOpenFileName(this, tr("Открыть файл"),
xmlPath, tr("XML files (*.xml);;HTML files (*.html);;"
"SVG files (*.svg);;User Interface files (*.ui)"));
QStandardItem *root = new QStandardItem ("Main");
root->setIcon(QIcon("D:/note.png"));
model->appendRow(root);
QDomDocument document;
if (!filePath.isEmpty()) {
QFile file(filePath);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
document.setContent(&file);
file.close();
}
//считываем root элемент
QDomElement xmlroot = document.firstChildElement();
//считываем childitems
QDomNodeList books = xmlroot.elementsByTagName("entry");
for (int i = 0; i < 1; i++)
{
QDomElement book = books.at(i).toElement();
QStandardItem *bookitem = new QStandardItem(book.attribute("term"));
bookitem->setIcon(QIcon("pic.png"));
QDomNodeList ne_chapters = book.elementsByTagName("entry");
for (int h = 0; h < 1; h++)
{
QDomElement ne_chapter = ne_chapters.at(h).toElement();
QStandardItem *ne_chapteritem = new QStandardItem(ne_chapter.attribute("term"));
ne_chapteritem->setIcon(QIcon("D:/pic2.png"));
bookitem->appendRow(ne_chapteritem);
}
//считываем подпункты
QDomNodeList chapters = book.elementsByTagName("entry");
for (int h = 1; h < chapters.count()-1; h++)//выбираю все item кроме последнего
{
QDomElement chapter = chapters.at(h).toElement();
QStandardItem *chapteritem = new QStandardItem(chapter.attribute("term"));
chapteritem->setIcon(QIcon("D:/pic2.png"));
bookitem->appendRow(chapteritem);
}
for (int s = chapters.count()-1; s < chapters.count(); s++)//последний item
{
QDomElement chapter = chapters.at(s).toElement();
QStandardItem *chapteritem = new QStandardItem(chapter.attribute("term"));
chapteritem->setIcon(QIcon("pic.png"));
bookitem->appendRow(chapteritem);
}
root->appendRow(bookitem);
}
}
}
Перед этим для отображения в TreeView объявлена модель:
model = new QStandardItemModel (0,1,this);//0 - строка; 1 столбец;
ui->treeView->setModel(model);
Возникла необходимость вместо TreeView использовать TreeWidget, как я могу присвоить model TreeWidget в таком случае, возможно ли подружить его с QStandartItemModel или подход в корне неправильный и мне придётся переписывать всё иначе?
Заранее спасибо за помощь