QTableWidget数据存为XML,启动时加载XML

widget.h

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QFile>
#include <QVector>
#include <QXmlStreamWriter>
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = 0);
    void readXML();
    ~Widget();
 
public slots:
    void addStrPtnClicked();
    void delStrPtnClicked();
    void saveXML();
    void writeXML();
 
private:
    Ui::Widget *ui;
 
    QVector<QString> m_data;
};
 
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    QStringList strategyTableHeadList;
    strategyTableHeadList.append(tr("策略序号"));
    strategyTableHeadList.append(tr("策略内容"));
    strategyTableHeadList.append(tr("动作容量(MW)"));
    ui->strategyTableWidget->setColumnCount(3);
    ui->strategyTableWidget->setHorizontalHeaderLabels(strategyTableHeadList);
    QHeaderView *strategyHeader = ui->strategyTableWidget->verticalHeader();
    strategyHeader->setHidden(true);// 隐藏行号
    ui->strategyTableWidget->setColumnWidth(1,450);
    ui->strategyTableWidget->horizontalHeader()->setStretchLastSection(true);
 
    connect(ui->addStrPushButton,SIGNAL(clicked(bool)),this,SLOT(addStrPtnClicked()));
    connect(ui->delStrPushButton,SIGNAL(clicked(bool)),this,SLOT(delStrPtnClicked()));
    connect(ui->editStrPushButton,SIGNAL(clicked(bool)),this,SLOT(writeXML()));
 
    readXML();
 
    this->setWindowTitle("CSDN IT1995");
 
}
 
void Widget::saveXML(){
}
 
void Widget::readXML(){
    QFile file("my.xml");
    if (!file.open(QFile::ReadOnly | QFile::Text)){
        qDebug()<<"Error: cannot open file";
        return;
    }
    QXmlStreamReader reader;
    reader.setDevice(&file);
    while (!reader.atEnd()){
        QXmlStreamReader::TokenType type = reader.readNext();
        if (type == QXmlStreamReader::Characters&& !reader.isWhitespace()){
            QString temp(reader.text().toUtf8());
            m_data.append(temp);
        }
    }
    int k=0;
    if(m_data.size()/3==0)
        return;
    for(int i=0;i<m_data.size()/3;i++){
        ui->strategyTableWidget->insertRow(ui->strategyTableWidget->rowCount());
        for(int j=0;j<3;j++){
            QTableWidgetItem *newItem=new QTableWidgetItem();
            newItem->setText(m_data.at(k++));
            //qDebug()<<newItem->text();
            ui->strategyTableWidget->setItem(i,j,newItem);
        }
    }
}
 
void Widget::addStrPtnClicked(){
    ui->strategyTableWidget->insertRow(ui->strategyTableWidget->rowCount());
    QTableWidgetItem *newItem_1=new QTableWidgetItem();	//序号
    QTableWidgetItem *newItem_2=new QTableWidgetItem(); //内容
    QTableWidgetItem *newItem_3=new QTableWidgetItem();	//总容量
    newItem_1->setText(QString::number(ui->strategyTableWidget->rowCount()));
    ui->strategyTableWidget->setItem(ui->strategyTableWidget->rowCount()-1,0,newItem_1);
}
 
void Widget::delStrPtnClicked(){
    if(ui->strategyTableWidget->currentItem()==NULL)
        return;
    ui->strategyTableWidget->removeRow(ui->strategyTableWidget->currentRow());
 
    //从新排序
    for(int i=0;i<ui->strategyTableWidget->rowCount();i++){
        ui->strategyTableWidget->item(i,0)->setText(QString::number(i+1));
    }
}
 
void Widget::writeXML(){
    qDebug()<<"11111";
    QFile file("my.xml");
    if (!file.open(QFile::WriteOnly | QFile::Text)){
        qDebug() << "Error: cannot open file";
        return;
    }
    QXmlStreamWriter writer(&file);
    writer.setAutoFormatting(true);
    writer.writeStartDocument();
    writer.writeStartElement("strategy");
    for(int i=0;i<ui->strategyTableWidget->rowCount();i++){
        writer.writeStartElement("number");
        writer.writeTextElement("order",ui->strategyTableWidget->item(i,0)->text());
        writer.writeTextElement("content",ui->strategyTableWidget->item(i,1)->text());
        writer.writeTextElement("capacity",ui->strategyTableWidget->item(i,2)->text());
        writer.writeEndElement();
    }
    writer.writeEndElement();
    writer.writeEndDocument();
    file.close();
}
 
Widget::~Widget()
{
    delete ui;
}

main.cpp

#include "widget.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
 
    return a.exec();
}

猜你喜欢

转载自blog.csdn.net/u014746838/article/details/91902709