1、C++代码
以下是一个使用QTabelWidget交互编辑CSV文件的C++代码示例:
#include <QFile>
#include <QTextStream>
#include <QTableWidget>
#include <QTableWidgetItem>
// 打开CSV文件并加载到表格中
void loadCSV(const QString& fileName, QTableWidget* table) {
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "Failed to open file: " << file.errorString();
return;
}
QTextStream stream(&file);
QString line;
int row = 0;
while ((line = stream.readLine()).count() > 0) {
QStringList list = line.split(",");
int col = 0;
for (const QString& str : list) {
QTableWidgetItem* item = new QTableWidgetItem(str);
table->setItem(row, col, item);
col++;
}
row++;
}
}
// 将表格内容保存到CSV文件中
void saveCSV(const QString& fileName, QTableWidget* table) {
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "Failed to open file: " << file.errorString();
return;
}
QTextStream stream(&file);
for (int i = 0; i < table->rowCount(); i++) {
for (int j = 0; j < table->columnCount(); j++) {
stream << table->item(i, j)->text();
if (j < table->columnCount() - 1) {
stream << ",";
}
}
stream << "\n";
}
}
使用示例:
创建一个QTableWidget对象,例如:
QTableWidget* table = new QTableWidget(4, 3); // 4行3列的表格
加载CSV文件到表格中,例如:
QString fileName = "example.csv"; // CSV文件路径
loadCSV(fileName, table); // 加载CSV文件到表格中
在表格中进行编辑,例如:
在单元格中输入内容:
table->item(0, 0)->setText("Hello"); // 将第1行第1列的单元格内容设置为"Hello"
在单元格中添加新行:
table->insertRow(0); // 在第1行插入新行
在单元格中删除行:
table->removeRow(0); // 删除第1行
将表格内容保存到CSV文件中,例如:
cpQString fileName = "example_new.csv"; // 保存文件路径和名称
saveCSV(fileName, table); // 将表格内容保存到CSV文件中
2、Python 代码
以下是一个使用QTabelWidget交互编辑CSV文件的Python代码示例:
import csv
from PyQt5.QtWidgets import QMainWindow, QApplication, QTableWidget, QTableWidgetItem, QFileDialog, QAction, QMenu
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
class CSVTableWidget(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("CSV Table Widget")
self.setGeometry(100, 100, 800, 600)
self.table = QTableWidget()
self.table.setColumnCount(2)
self.table.setHorizontalHeaderLabels(["Name", "Value"])
self.setCentralWidget(self.table)
self.statusBar().showMessage("Ready")
self.menubar = self.menuBar()
self.file_menu = self.menubar.addMenu("File")
self.open_action = QAction("Open", self, triggered=self.openFile)
self.exit_action = QAction("Exit", self, triggered=self.close)
self.file_menu.addAction(self.open_action)
self.file_menu.addAction(self.exit_action)
def openFile(self):
filename, _ = QFileDialog.getOpenFileName(self, "Open file", ".", "CSV Files (*.csv)")
if filename:
with open(filename, "r") as csvfile:
reader = csv.reader(csvfile)
rows = list(reader)
self.table.setRowCount(len(rows))
for i in range(len(rows)):
for j in range(len(rows[i])):
item = QTableWidgetItem(rows[i][j])
item.setFlags(item.flags() | Qt.ItemIsEditable)
self.table.setItem(i, j, item)
self.table.sortItems(0, Qt.AscendingOrder)
self.statusBar().showMessage("File opened")
def closeEvent(self, event):
save = QMessageBox.questionIcon()
save = QMessageBox()
save.setText("Do you want to save changes?")
save.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
result = save.exec_()
if result == QMessageBox.Save:
self.saveFile()
event.accept()
elif result == QMessageBox.Cancel:
event.ignore()
else:
event.accept()
def saveFile(self):
filename = QFileDialog.getSaveFileName(self, "Save file", "", "CSV Files (*.csv)")
if filename:
with open(filename, "w", newline="") as csvfile:
writer = csv.writer(csvfile)
for row in range(self.table.rowCount()):
row_data = []
for column in range(self.table.columnCount()):
item = self.table.itemAtPosition(row, column)
row_data.append(item.text())
writer.writerow(row_data)
self.statusBar().showMessage("File saved")
在上面的代码中,我们创建了一个名为CSVTableWidget
的子类,继承自QMainWindow
。在初始化函数中,我们创建了一个名为table
的QTableWidget
对象,并设置了列标题。然后,我们创建了一个菜单栏,并在菜单栏中添加了一个名为"File"的子菜单。在子菜单中,我们添加了两个动作,分别用于打开文件和退出程序。当用户选择打开文件时,我们使用QFileDialog
对话框选择CSV文件,然后使用csv
模块读取文件内容并填充到table
中。当用户选择退出程序时,我们关闭窗口并触发closeEvent
函数。在closeEvent
函数中,我们弹出一个消息框,询问用户是否要保存更改。如果用户选择保存更改,则调用saveFile
函数将表格内容保存到CSV文件中;否则,直接关闭窗口。在saveFile
函数中,我们使用QFileDialog
对话框选择保存文件的位置和文件名,
后续公众号会发布系列教程,更多内容请关注公众号:程序猿学习日记