Qt中实现把QTableView控件中的数导出到表格和文本,请给我完整代码
时间: 2024-02-09 11:12:27 浏览: 95
以下是将QTableView控件中的数据导出到表格和文本的完整代码:
```cpp
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QFileDialog>
#include <QTextStream>
#include <QMessageBox>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建一个QTableView控件和一个QStandardItemModel模型
QTableView tableView;
QStandardItemModel model;
// 设置模型的行数和列数
model.setRowCount(3);
model.setColumnCount(2);
// 设置表头
model.setHorizontalHeaderLabels({"姓名", "年龄"});
// 设置数据
model.setItem(0, 0, new QStandardItem("张三"));
model.setItem(0, 1, new QStandardItem("18"));
model.setItem(1, 0, new QStandardItem("李四"));
model.setItem(1, 1, new QStandardItem("20"));
model.setItem(2, 0, new QStandardItem("王五"));
model.setItem(2, 1, new QStandardItem("22"));
// 将模型设置给QTableView控件
tableView.setModel(&model);
// 导出数据到表格
QString exportFileName = QFileDialog::getSaveFileName(nullptr,
"导出表格",
"",
"Excel(*.xlsx)");
if (!exportFileName.isEmpty()) {
// 创建一个QXlsx::Document对象
QXlsx::Document xlsx;
// 获取行数和列数
int rowCount = model.rowCount();
int columnCount = model.columnCount();
// 遍历模型中的数据,将数据写入到QXlsx::Document对象中
for (int row = 0; row < rowCount; ++row) {
for (int column = 0; column < columnCount; ++column) {
QModelIndex index = model.index(row, column);
QString data = model.data(index).toString();
xlsx.write(row + 1, column + 1, data);
}
}
// 保存文件
xlsx.saveAs(exportFileName);
}
// 导出数据到文本
exportFileName = QFileDialog::getSaveFileName(nullptr,
"导出文本",
"",
"Text(*.txt)");
if (!exportFileName.isEmpty()) {
// 创建一个输出文件流
QFile file(exportFileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream out(&file);
// 获取行数和列数
int rowCount = model.rowCount();
int columnCount = model.columnCount();
// 遍历模型中的数据,将数据写入到输出文件流中
for (int row = 0; row < rowCount; ++row) {
for (int column = 0; column < columnCount; ++column) {
QModelIndex index = model.index(row, column);
QString data = model.data(index).toString();
out << data << "\t";
}
out << "\n";
}
// 关闭文件
file.close();
QMessageBox::information(nullptr, "提示", "导出成功!");
} else {
QMessageBox::critical(nullptr, "错误", "文件打开失败!");
}
}
tableView.show();
return a.exec();
}
```
在这个例子中,我们使用了QTableView控件和QStandardItemModel模型来展示数据。我们通过设置模型的行数和列数,以及设置表头和数据来填充模型。然后,我们将模型设置给QTableView控件,以便在GUI中显示数据。
我们使用QFileDialog来获取导出文件的路径和名称。对于导出到表格中,我们使用了QXlsx::Document对象来创建一个Excel文件,并将模型中的数据写入到该文件中。对于导出到文本中,我们使用了QFile和QTextStream来创建一个输出文件流,并将模型中的数据写入到该输出文件流中。最后,我们关闭文件并显示一个消息框来提示用户导出成功或失败。
阅读全文