【Qt入门实践】数据库xml操作

转载请注明出处:http://blog.csdn.net/feng1790291543


Qt的xml篇:

    建立Qt工程,使用的是GUI显示的。


本代码所使用的xml文件截图:



提供自己写的源码:


头文件部分------------------------------------------

widget010.h


#ifndef WIDGET010_H

#define WIDGET010_H


//#include <QWidget>

#include <QtCore>

#include <QtGui>

#include <QtXml/QtXml>

#include <QFile>

#include <string>

#include <stdlib.h>


namespace Ui {

    class Widget010;

}


class Widget010 : public QWidget

{

    Q_OBJECT


public:

    explicit Widget010(QWidget *parent = 0);

    ~Widget010();

    void doXml(const QString operate);


private:

    Ui::Widget010 *ui;


private slots:

    void on_listWidget_clicked(QModelIndex index);

    void on_pushButtonUpdate_clicked();     //更新操作

    void on_pushButtonDelete_clicked();     //删除操作

    void on_pushButtonSelect_clicked();     //查询操作

    void on_pushButtonAdd_clicked();        //添加操作

    void on_pushButtonShowAll_clicked();    //显示所有数据操作

};


#endif // WIDGET010_H


源码部分-------------------------------------

widget010.cpp


#include "widget010.h"

#include "ui_widget010.h"


Widget010::Widget010(QWidget *parent) :

        QWidget(parent),

        ui(new Ui::Widget010)

{

    ui->setupUi(this);


    ui->listWidget->setSelectionBehavior(QAbstractItemView::SelectRows);   //设置选择动作

}


Widget010::~Widget010()

{

    delete ui;

}



void Widget010::on_pushButtonShowAll_clicked()

{

    ui->listWidget->clear();

   

    QFile file("my.xml");                                               //定义文件实例,xml文件名为my.xml

    qDebug()<<"hi,111";


    QDomDocument doc;

    bool flag1=file.open(QIODevice::ReadOnly);                        //以只读方式打开文件

    qDebug()<<"7777777777777777777"<<flag1;

    if(!flag1)

        return ;


    bool flag2=doc.setContent(&file);                                   //将文件以doc 形式显示内容

    qDebug()<<"8888888888888888888"<<flag2;

    if(!flag2)

    {

        file.close();

        return ;

    }


    file.close();                                                      //关闭xml文件,

    /***************************注:前面使用doc,是将操作文件的任务交给doc处理 ***********************/


    QDomElement docElem=doc.documentElement();

    QDomNode firstNode=docElem.firstChild();

    while(!firstNode.isNull())

    {

        if(firstNode.isElement())

        {

            QDomElement firstElem=firstNode.toElement();


            ui->listWidget->addItem(firstElem.tagName()+" "+firstElem.attribute("id"));


            QDomNodeList listNode=firstElem.childNodes();


            for(int i=0;i<listNode.count();i++)                  //从第一个节点开始,层层显示标签和元素内容

            {

                QDomNode  node=listNode.at(i);

                if(node.isElement())

                    ui->listWidget->addItem("  "+node.toElement().tagName()+" : "+node.toElement().text());

            }

        }

        firstNode=firstNode.nextSibling();

    }


}


void Widget010::on_pushButtonAdd_clicked()

{

    ui->listWidget->clear();

    ui->listWidget->addItem(QString("无法添加!"));

   

QFile file("my.xml");                                               //定义文件实例,xml文件名为my.xml

    qDebug()<<"hi,111";


    QDomDocument doc;

    bool flag1=file.open(QIODevice::ReadOnly);                        //以只读方式打开文件

    qDebug()<<"7777777777777777777"<<flag1;

    if(!flag1)

        return ;


    bool flag2=doc.setContent(&file);                                   //将文件以doc 形式显示内容

    qDebug()<<"8888888888888888888"<<flag2;

    if(!flag2)

    {

        file.close();

        return ;

    }


    file.close();                                                      //关闭xml文件,

    /***************************注:前面使用doc,是将操作文件的任务交给doc处理 ***********************/


    QDomElement root=doc.documentElement();

    QDomElement book=doc.createElement("book");

    QDomAttr id=doc.createAttribute("id");

    QDomElement title=doc.createElement("title");

    QDomElement author=doc.createElement("author");

    QDomText text;


    QString num=root.lastChild().toElement().attribute("id");  //子节点元素的添加,id是元素属性的自增操作

    int count=num.toInt()+1;

    id.setValue(tr("0")+QString::number(count));

    book.setAttributeNode(id);

    text=doc.createTextNode(ui->lineEditBookName->text());

    title.appendChild(text);

    text=doc.createTextNode(ui->lineEditBookMaker->text());

    author.appendChild(text);

    book.appendChild(title);

    book.appendChild(author);


    root.appendChild(book);

    if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))

    {

        return ;

    }


    QTextStream out(&file);

    doc.save(out,4);

    file.close();

    ui->listWidget->clear();

    ui->listWidget->addItem("添加成功.");

}


void Widget010::doXml(const QString operate)           //查、删、更新操作方法

{

    ui->listWidget->clear();

    ui->listWidget->addItem("没有找到相关内容.");


   

QFile file("my.xml");                                               //定义文件实例,xml文件名为my.xml

    qDebug()<<"hi,111";


    QDomDocument doc;

    bool flag1=file.open(QIODevice::ReadOnly);                        //以只读方式打开文件

    qDebug()<<"7777777777777777777"<<flag1;

    if(!flag1)

        return ;


    bool flag2=doc.setContent(&file);                                   //将文件以doc 形式显示内容

    qDebug()<<"8888888888888888888"<<flag2;

    if(!flag2)

    {

        file.close();

        return ;

    }


    file.close();                                                      //关闭xml文件,

    /***************************注:前面使用doc,是将操作文件的任务交给doc处理 ***********************/


    QDomNodeList list=doc.elementsByTagName("book");

    for(int i=0;i<list.count();i++)

    {

        QDomElement e=list.at(i).toElement();

        if(e.attribute("id")==ui->lineEditBookNum->text())

        {

            if(operate=="delete")

            {

                QDomElement root=doc.documentElement();

                root.removeChild(list.at(i));

                QFile file("my.xml");

                if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))        //只写操作更新,并且写入文件中

                {

                    return ;

                }


                QTextStream out(&file);

                doc.save(out,4);

                file.close();

                ui->listWidget->clear();

                ui->listWidget->addItem("删除成功.");

            }

            else if(operate=="update")

            {

                QDomNodeList child=list.at(i).childNodes();

                child.at(0).toElement().firstChild().setNodeValue(ui->lineEditBookName->text());

                child.at(1).toElement().firstChild().setNodeValue(ui->lineEditBookMaker->text());

                QFile file("my.xml");

                if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))

                {

                    return ;

                }


                QTextStream out(&file);

                doc.save(out,4);

                file.close();

                ui->listWidget->clear();

                ui->listWidget->addItem("更新成功.");

            }

            else if(operate=="find")                 //查询

            {

                ui->listWidget->clear();  

                ui->listWidget->addItem(e.tagName()+e.attribute("id"));

                QDomNodeList listNode=e.childNodes();

                for(int i=0;i<listNode.count();i++)

                {

                    QDomNode  node=listNode.at(i);

                    if(node.isElement())

                        ui->listWidget->addItem(" "+node.toElement().tagName()+":"+node.toElement().text());

                }

            }

        }

    }


}


void Widget010::on_pushButtonSelect_clicked()                  //查询操作

{

    doXml("find");

}


void Widget010::on_pushButtonDelete_clicked()                          //删除操作

{

    doXml("delete");

}


void Widget010::on_pushButtonUpdate_clicked()                         //更新操作

{

    doXml("update");

}

void Widget010::on_listWidget_clicked(QModelIndex index)                 //点击选择listwidget中某个记录,在lineEdit中相关的显示

{

    if(!ui->listWidget->isItemSelected(ui->listWidget->currentItem()))   //首先判断时候被选上,否则退出

        return ;


    QFile file("my.xml");                                               //定义文件实例,xml文件名为my.xml

    qDebug()<<"hi,111";


    QDomDocument doc;

    bool flag1=file.open(QIODevice::ReadOnly);                        //以只读方式打开文件

    qDebug()<<"7777777777777777777"<<flag1;

    if(!flag1)

        return ;


    bool flag2=doc.setContent(&file);                                   //将文件以doc 形式显示内容

    qDebug()<<"8888888888888888888"<<flag2;

    if(!flag2)

    {

        file.close();

        return ;

    }


    file.close();                                                      //关闭xml文件,

    /***************************注:前面使用doc,是将操作文件的任务交给doc处理 ***********************/


    int curRow=ui->listWidget->currentIndex().row();                  //获取当前行数

    QDomElement root=doc.documentElement();                           //定义根元素


    if(curRow<0)                                                     //如果内容显示为空,则退出

    {

        return;

    }

    QListWidgetItem *itemTaget=ui->listWidget->item(curRow);

    QListWidgetItem *itemName=ui->listWidget->item(curRow+1);

    QListWidgetItem *itemMaker=ui->listWidget->item(curRow+2);          //获取当前项,本xml是设置第一个节点有两个元素,故,有三项


    if(itemTaget->text().contains("book"))                            //只有当选中项的内容含有“book”字符串的,进行显示

    {

        ui->lineEditTaget->setText(itemTaget->text().right(3));          //其中是对字符串进行截取显示

    }

    if(itemMaker->text().contains("author"))                          //同上

    ui->lineEditBookMaker->setText(itemMaker->text().right(itemMaker->text().size()-11));//同上

    if(itemName->text().contains("title"))                                       //同上

    ui->lineEditBookName->setText(itemName->text().right(itemName->text().size()-10));  //同上


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值