Qt工作笔记-把QTableWidget数据存为XML,启动时加载XML
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-把QTableWidget数据存为XML,启动时加载XML
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運行截圖如下:
添加好數據后保存:
此時保存的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_OBJECTpublic: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_Hwidget.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(); }總結
以上是生活随笔為你收集整理的Qt工作笔记-把QTableWidget数据存为XML,启动时加载XML的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习笔记-命名管道(FIFO)
- 下一篇: Qt工作笔记-QLineEdit与QTe