我的xml文件
<?xml version="1.0" encoding="iso-8859-1"?>
<categories name="POI Category List">
<pcategory pixmapdir = ":/images/all.png" text = "List All in this Group" >
</pcategory>
<pcategory pixmapdir = ":/images/accommodation.png" text = "Accommodation" >
<ccategory pixmapdir = ":/images/camping.png" text = "Camping" />
<ccategory pixmapdir = ":/images/accommodation.png" text = "Hotel or Motel" />
</pcategory>
<pcategory pixmapdir = ":/images/airport.png" text = "Airport" >
<ccategory pixmapdir = ":/images/airport.png" text = "Airline Access" />
<ccategory pixmapdir = ":/images/airport.png" text = "Airport Ground" />
</pcategory>
</categories>
我解析的代码
class xml : public QWidget
{
Q_OBJECT
public:
xml(QWidget *parent = 0, Qt::WFlags flags = 0);
void GetNextCategoryInfo(QDomNode &node, QString &dir, QString &text);
void GetPreCategoryInfo(QDomNode &node, QString &dir, QString &text);
void PrePage();
~xml();
public slots:
void NextPage();
private:
Ui::xmlClass ui;
QDomNode level1NodePre;
QDomNode level2NodePre;
QDomNode level1NodeNext;
QDomNode level2NodeNext;
};
xml::xml(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
QString errorStr;
int errorLine;
int errorColumn;
QDomDocument domDocument;
QFile file(":/test.xml");
bool statusOK = domDocument.setContent(&file, true, &errorStr, &errorLine, &errorColumn);
if (!statusOK)
{
QMessageBox::critical(0,
QObject::tr("DOM Parser"),
QObject::tr("Could not read or find the contents document. Error at line %1, column %2:\n%3")
.arg(errorLine).arg(errorColumn).arg(errorStr)
);
exit(-1);
}
QDomElement rootElement =domDocument.documentElement();
QDomNode level2MenuNode = rootElement.firstChild();
level1NodePre = rootElement.firstChild();
level1NodeNext = level1NodePre;
//NextPage();这里调用多次都不会崩溃的,只有点击pushButton时,就会崩溃
//NextPage();
//NextPage();
connect( ui.pushButton,SIGNAL(clicked()),this,SLOT(NextPage()));
}
void xml::GetNextCategoryInfo(QDomNode &node, QString &dir, QString &text)
{
if( !node.isNull() )
{
QDomElement exampleElement = node.toElement();//崩溃发生在这里
dir = exampleElement.attribute("pixmapdir");
text = exampleElement.attribute("text");
node = node.nextSibling();
}
}
void xml::NextPage()
{
level1NodePre = level1NodeNext.previousSibling();
QString pixdir, text;
GetNextCategoryInfo(level1NodeNext, pixdir, text);
GetNextCategoryInfo(level1NodeNext, pixdir, text);//响应clicked消息时,在这里将崩溃
GetNextCategoryInfo(level1NodeNext, pixdir, text);
GetNextCategoryInfo(level1NodeNext, pixdir, text);
}
奇怪的地方在于,我调用多次NextPage(),都能解析正确,但是,只要与pushButton的clicked消息连接时候,调用NextPage(),程序就会崩溃,哪位知道问题在哪里吗?