QTableWidget表格操作

该文介绍如何使用VS和Qt结合QTableWidget实现表格的增删功能,并通过QPushButton控制数据保存到文件。当点击按钮时,可以执行添加行、删除行和保存数据到XML文件的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VS+Qt实现对QTableWidget表格的增加、删除、保存,并且数据同步到文件

详细描述:通过点击按钮操作实现对可视化表格的增加和删除操作,然后点击保存按钮同步更新数据到文件中。

首先对示例进行步骤分析,该示例用到QTableWidget、QPushButton、QFile类

  1. 创建QTableWidget表格对象
  2. 对表格进行初始化操作
  3. 创建QPushButton按钮对象,利用按钮实现增加删除和保存
  4. 建立信号和槽的连接

代码实现:
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();

}
}

在这里插入图片描述
如有问题,可继续追问哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值