• 4190阅读
  • 0回复

奇怪的xml解析问题 [复制链接]

上一主题 下一主题
离线yxhappy
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-29
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我的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(),程序就会崩溃,哪位知道问题在哪里吗?
快速回复
限100 字节
 
上一个 下一个