Qt QTableWidget某列为删除和添加按钮,点击删除当前行,点击添加添加一行。

本文介绍了如何使用Qt的QTableWidget实现表格中某一列添加和删除按钮的功能,用户可以通过点击添加新的行,删除当前行,提升数据管理的交互性。

实现:Qt QTableWidget某列为删除和添加按钮,点击删除当前行,点击添加添加一行。

一、运行效果图

QTableWidget.wmv

二、源码

1.头文件

#pragma once

#include <QWidget>
#include "ui_QtableWidgetNB.h"

class QtableWidgetNB : public QWidget
{
   
   
	Q_OBJECT

public:
	QtableWidgetNB(QWidget *parent = Q_NULLPTR);
	~QtableWidgetNB();
	void addRow(QString & name);
	void removeRow(int nRow);

public slots:
	void sltBtnAddClicked();
	void sltBtnDeleteClicked();

private:
	Ui::QtableWidgetNB ui;
};

2、源文件

#include "QtableWidgetNB.h"
#include <QPushButton>
Qt 中,使用 `QTableWidget` 实现“将每一次保存的数据按顺序保存到表格中,且不改变上一次保存的结果”,是一个典型的 GUI 表格数据管理任务。你希望每次点击“保存”按钮时,新增一行,并保持之前所有行不变。 --- ### ✅ 功能目标 - 使用 `QTableWidget` 显示表格; - 固定列数为 13 列; - 每次点击“保存”按钮,新增一行记录; - 所有已添加的行内容不可修改(保证历史数据不变); - 数据可选择性地写入文件或数据库进行持久化存储。 --- ### ✅ 示例代码(Qt Widgets + QTableWidget) ```cpp #include <QApplication> #include <QMainWindow> #include <QTableWidget> #include <QPushButton> #include <QVBoxLayout> #include <QDateTime> class TableSaveWindow : public QMainWindow { Q_OBJECT public: TableSaveWindow(QWidget *parent = nullptr) : QMainWindow(parent), currentRow(0) { setupUI(); } private: QTableWidget* tableWidget; int currentRow; void setupUI() { QWidget* centralWidget = new QWidget(this); QVBoxLayout* layout = new QVBoxLayout(centralWidget); // 创建表格控件:13列 tableWidget = new QTableWidget(0, 13); tableWidget->setHorizontalHeaderLabels(QStringList() << "列1" << "列2" << "列3" << "列4" << "列5" << "列6" << "列7" << "列8" << "列9" << "列10" << "列11" << "列12" << "列13"); // 设置表格不可编辑 tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); layout->addWidget(tableWidget); // 添加保存按钮 QPushButton* saveButton = new QPushButton("保存"); connect(saveButton, &QPushButton::clicked, this, &TableSaveWindow::onSaveClicked); layout->addWidget(saveButton); setCentralWidget(centralWidget); resize(1000, 600); setWindowTitle("QTableWidget 保存示例"); } void onSaveClicked() { // 插入新行 tableWidget->insertRow(currentRow); // 填充当前行数据(这里用模拟数据) for (int col = 0; col < 12; ++col) { QTableWidgetItem* item = new QTableWidgetItem(QString("数据%1-%2").arg(currentRow + 1).arg(col + 1)); tableWidget->setItem(currentRow, col, item); } // 第13列为时间戳 QString timestamp = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); QTableWidgetItem* timeItem = new QTableWidgetItem(timestamp); tableWidget->setItem(currentRow, 12, timeItem); currentRow++; // 更新行计数器 } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); TableSaveWindow window; window.show(); return app.exec(); } #include "main.moc" ``` --- ### 🔍 关键点解释: | 组件 | 说明 | |------|------| | `QTableWidget` | 提供基于单元格的表格显示功能 | | `insertRow()` | 在指定位置插入新行 | | `setItem()` | 设置指定单元格的内容 | | `setHorizontalHeaderLabels()` | 设置表头 | | `setEditTriggers(QAbstractItemView::NoEditTriggers)` | 禁止用户编辑表格内容,确保历史数据不变 | | `QDateTime::currentDateTime()` | 获取当前时间作为示例数据 | --- ### ✅ 可选扩展功能(建议): 1. **持久化保存**: - 将每次保存的数据追加写入 CSV 文件或 SQLite 数据库; - 使用 `QFile` `QTextStream` 追加写入文本文件; - 使用 `QSqlTableModel` 或 `QSqlQuery` 存储到 SQLite。 2. **读取已有数据**: - 启动时从文件或数据库加载数据并插入到 `QTableWidget` 中。 3. **多线程安全写入**: - 如果是异步操作,使用 `QMetaObject::invokeMethod` 或 `QThread` 配合 `QMutex` 来保护 UI 操作文件写入。 --- ###
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值