⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlstreamreader.cpp

📁 QT4 gui programming的随书光盘
💻 CPP
字号:
#include <QtGui>#include <QtXml>#include <iostream>#include "xmlstreamreader.h"XmlStreamReader::XmlStreamReader(QTreeWidget *tree){    treeWidget = tree;}bool XmlStreamReader::readFile(const QString &fileName){    QFile file(fileName);    if (!file.open(QFile::ReadOnly | QFile::Text)) {        std::cerr << "Error: Cannot read file " << qPrintable(fileName)                  << ": " << qPrintable(file.errorString())                  << std::endl;        return false;    }    reader.setDevice(&file);    reader.readNext();    while (!reader.atEnd()) {        if (reader.isStartElement()) {            if (reader.name() == "bookindex") {                readBookindexElement();            } else {                reader.raiseError(QObject::tr("Not a bookindex file"));            }        } else {            reader.readNext();        }    }    file.close();    if (reader.hasError()) {        std::cerr << "Error: Failed to parse file "                  << qPrintable(fileName) << ": "                  << qPrintable(reader.errorString()) << std::endl;        return false;    } else if (file.error() != QFile::NoError) {        std::cerr << "Error: Cannot read file " << qPrintable(fileName)                  << ": " << qPrintable(file.errorString())                  << std::endl;        return false;    }    return true;}void XmlStreamReader::readBookindexElement(){    reader.readNext();    while (!reader.atEnd()) {        if (reader.isEndElement()) {            reader.readNext();            break;        }        if (reader.isStartElement()) {            if (reader.name() == "entry") {                readEntryElement(treeWidget->invisibleRootItem());            } else {                skipUnknownElement();            }        } else {            reader.readNext();        }    }}void XmlStreamReader::readEntryElement(QTreeWidgetItem *parent){    QTreeWidgetItem *item = new QTreeWidgetItem(parent);    item->setText(0, reader.attributes().value("term").toString());    reader.readNext();    while (!reader.atEnd()) {        if (reader.isEndElement()) {            reader.readNext();            break;        }        if (reader.isStartElement()) {            if (reader.name() == "entry") {                readEntryElement(item);            } else if (reader.name() == "page") {                readPageElement(item);            } else {                skipUnknownElement();            }        } else {            reader.readNext();        }    }}void XmlStreamReader::readPageElement(QTreeWidgetItem *parent){    QString page = reader.readElementText();    if (reader.isEndElement())        reader.readNext();    QString allPages = parent->text(1);    if (!allPages.isEmpty())        allPages += ", ";    allPages += page;    parent->setText(1, allPages);}void XmlStreamReader::skipUnknownElement(){    reader.readNext();    while (!reader.atEnd()) {        if (reader.isEndElement()) {            reader.readNext();            break;        }        if (reader.isStartElement()) {            skipUnknownElement();        } else {            reader.readNext();        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -