Shien
1st January 2011, 16:43
I have tree widget. After clicking create button I want that there would be created xml file, which has tree widget's data. Is it possible to do that? If so maybe somebody could tell me how to do that?
Added after 1 8 minutes:
I found some examples in few books. but when I trie to use them few errors
there goes examples:
bool writeXml(const QString &fileName, QTreeWidget *treeWidget)
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
std::cerr << "Error: Cannot write file "
<< qPrintable(fileName) << ": "
<< qPrintable(file.errorString()) << std::endl;
return false;
}
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("bookindex");
for (int i = 0; i < treeWidget->topLevelItemCount(); ++i)
writeIndexEntry(&xmlWriter, treeWidget->topLevelItem(i));
xmlWriter.writeEndDocument();
file.close();
if (file.error()) {
std::cerr << "Error: Cannot write file "
<< qPrintable(fileName) << ": "
<< qPrintable(file.errorString()) << std::endl;
return false;
}
return true;
}
void writeIndexEntry(QXmlStreamWriter *xmlWriter, QTreeWidgetItem *item)
{
xmlWriter->writeStartElement("entry");
xmlWriter->writeAttribute("term", item->text(0));
QString pageString = item->text(1);
if (!pageString.isEmpty()) {
QStringList pages = pageString.split(", ");
foreach (QString page, pages)
xmlWriter->writeTextElement("page", page);
}
for (int i = 0; i < item->childCount(); ++i)
writeIndexEntry(xmlWriter, item->child(i));
xmlWriter->writeEndElement();
}
So errors that ocurred is with std::cerr and another error that QFile file(fileName); file name wasn't described.
By the way in this example if I do understand it correctly there should be created file before tree is placed there?
Added after 1 8 minutes:
I found some examples in few books. but when I trie to use them few errors
there goes examples:
bool writeXml(const QString &fileName, QTreeWidget *treeWidget)
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
std::cerr << "Error: Cannot write file "
<< qPrintable(fileName) << ": "
<< qPrintable(file.errorString()) << std::endl;
return false;
}
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("bookindex");
for (int i = 0; i < treeWidget->topLevelItemCount(); ++i)
writeIndexEntry(&xmlWriter, treeWidget->topLevelItem(i));
xmlWriter.writeEndDocument();
file.close();
if (file.error()) {
std::cerr << "Error: Cannot write file "
<< qPrintable(fileName) << ": "
<< qPrintable(file.errorString()) << std::endl;
return false;
}
return true;
}
void writeIndexEntry(QXmlStreamWriter *xmlWriter, QTreeWidgetItem *item)
{
xmlWriter->writeStartElement("entry");
xmlWriter->writeAttribute("term", item->text(0));
QString pageString = item->text(1);
if (!pageString.isEmpty()) {
QStringList pages = pageString.split(", ");
foreach (QString page, pages)
xmlWriter->writeTextElement("page", page);
}
for (int i = 0; i < item->childCount(); ++i)
writeIndexEntry(xmlWriter, item->child(i));
xmlWriter->writeEndElement();
}
So errors that ocurred is with std::cerr and another error that QFile file(fileName); file name wasn't described.
By the way in this example if I do understand it correctly there should be created file before tree is placed there?