VS+Qt实现对QTableWidget表格的增加、删除、保存,并且数据同步到文件
详细描述:通过点击按钮操作实现对可视化表格的增加和删除操作,然后点击保存按钮同步更新数据到文件中。
首先对示例进行步骤分析,该示例用到QTableWidget、QPushButton、QFile类
- 创建QTableWidget表格对象
- 对表格进行初始化操作
- 创建QPushButton按钮对象,利用按钮实现增加删除和保存
- 建立信号和槽的连接
代码实现:
QXmlTable.h
#pragma execution_character_set("utf-8")
#include <QtWidgets/QMainWindow>
#include<QLabel>
#include<QPushButton>
#include<QTableWidget>
#include<QtXml>
#include<QDomDocument>
#include<QObject>
class QXmlTable : public QWidget
{
Q_OBJECT
/*Q_PROPERTY(QString labelTitle READ labelTitle WRITE setLabelTitle)
Q_PROPERTY(QString buttonText READ buttonText WRITE setButtonText)
Q_PROPERTY(QIcon buttonIcon READ buttonIcon WRITE setButtonIcon)*/
public:
QXmlTable(QWidget *parent = Q_NULLPTR);
~QXmlTable();
signals:
public slots :
void add_Row(); //增加行
void del_Row(); //删除行
void save_xml_clicked(); //保存
private:
QPushButton *btn1; //增加
QPushButton *btn2; //删除
QPushButton *btn3; //保存
QTableWidget *tableWidget;
public:
};
QXmlTable.h.cpp
#include<QWidget>
#include"QXmlTable.h"
#include<QFileDialog>
#include<QLineEdit>
#include<QHeaderView>
QXmlTable::QXmlTable(QWidget *parent)
: QWidget(parent)
{
//创建一个水平布局
QHBoxLayout *hLayout1 = new QHBoxLayout();
btn1 = new QPushButton("添加");
btn2 = new QPushButton("删除");
btn3 = new QPushButton("保存");
btn1->setParent(this); //设置父窗口
btn2->setParent(this);
btn3->setParent(this);
btn1->setFixedSize(45, 45); //设置按钮固定大小
btn2->setFixedSize(45, 45);
btn3->setFixedSize(45, 45);
//将控件一个个的水平放置
hLayout1->addWidget(btn1);
hLayout1->addWidget(btn2);
hLayout1->addWidget(btn3);
//构造一个QTableWidget的对象,并且初始化为0行,7列
tableWidget = new QTableWidget(0, 3, this);
tableWidget->resize(480, 350);
this->resize(480, 350);
//添加表头
QStringList header;
header << "学号" << "姓名" << "性别" ;
tableWidget->setHorizontalHeaderLabels(header);
//设置表格可编辑
tableWidget->setEditTriggers(QAbstractItemView::CurrentChanged);
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //拉伸
//tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); //根据内容调整
//隐藏行号
//tableWidget->setHidden(true);
//创建一个垂直布局
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->addLayout(hLayout1); //把水平布局放入到外部垂直布局中
vLayout->addWidget(tableWidget); //将控件放入到垂直布局中
setLayout(vLayout); //在窗口上安装该布局管理器
//信号和槽建立连接
connect(btn1, SIGNAL(clicked()), this, SLOT(add_Row())); //增加按钮
connect(btn2, SIGNAL(clicked()), this, SLOT(del_Row())); //删除按钮
connect(btn3, SIGNAL(clicked()), this, SLOT(save_xml_clicked())); //保存按钮
}
QXmlTable::~QXmlTable()
{
}
void QXmlTable::add_Row()
{
int RowCont;
RowCont = tableWidget->rowCount(); //获取表格行数
tableWidget->insertRow(RowCont);//增加一行
}
void QXmlTable::del_Row()
{
int rowIndex = tableWidget->currentRow(); //获取当前行的行号
if (rowIndex != -1)
{
tableWidget->removeRow(rowIndex); //删除一行
}
}
void QXmlTable::save_xml_clicked()
{
QFile file("D:/Tool/text.xml"); //打开文件
if (!file.open(QFile::WriteOnly | QIODevice::Text)) return; //只读方式打开文件,如文件不存在则创建
QXmlStreamWriter writer(&file); //
writer.setAutoFormatting(true); //允许自定义格式
int row = tableWidget->rowCount();
int col = tableWidget->columnCount();
writer.writeStartDocument();//开始一个文档
writer.writeStartElement("testtable");
for (int i = 0; i < row; i++)
{
writer.writeStartElement("row");
for (int j = 0; j < col; j++)
{
QTableWidgetItem* item = tableWidget->item(i, j); //获取每个单元格
writer.writeTextElement("col", item->text()); //将单元格中的t文本存入到对应的列中
}
writer.writeEndElement(); //列元素结束,将执行下一行
}
writer.writeEndElement(); //结束元素输入
writer.writeEndDocument(); //结束写一个文档
file.close();
}
}
如有问题,可继续追问哦。