Название: Чтение XML с отображением в TreeWidget
Отправлено: Stek от Июль 23, 2012, 12:33
Доброго времени суток!Продолжаю разбираться с возможностью записи-чтения 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 или подход в корне неправильный и мне придётся переписывать всё иначе? Заранее спасибо за помощь :)
Название: Re: Чтение XML с отображением в TreeWidget
Отправлено: mutineer от Июль 23, 2012, 12:44
QTreeWidget - Это QTreeView + встроенная модель. В чем смысл такого перехода?
Название: Re: Чтение XML с отображением в TreeWidget
Отправлено: DmitryM от Июль 23, 2012, 13:09
как я могу присвоить model TreeWidget в таком случае
Никак. У виджетов setModel находиться в private.
Название: Re: Чтение XML с отображением в TreeWidget
Отправлено: Stek от Июль 23, 2012, 13:18
Изначально использовал TreeWidget, динамически создавал item-ы и сохранял в xml, соответственно понадобилось ещё и чтение. С TreeWidget чтение организовать у меня не получилось (смотрел примеры и qt и по Бланшету), не дал ладу по скольку с qt знаком второй месяц. Получилось по одному примеру отобразить как надо в TreeView, но использовать в своей программе и widget и view не вариант, очень нужно реализовать чтение именно в treewidget(на нём завязан ф-нал меню).
Ну вот как-то так ???
|