c++ qtablewidget当页面关闭时数据不没 打开后继续显示页面上
时间: 2023-08-07 10:03:45 浏览: 79
如果您希望在关闭页面后仍然保留 QTableWidget 的数据,可以将数据保存到本地文件或数据库中,在打开页面时再从文件或数据库中读取数据并填充到 QTableWidget 中。
以下是一个简单的例子,将 QTableWidget 的数据保存到 CSV 文件中:
```cpp
#include <QFile>
#include <QTextStream>
#include <QHeaderView>
#include <QTableWidgetItem>
void saveDataToCsv(const QString &fileName, QTableWidget *tableWidget)
{
QFile file(fileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream out(&file);
for (int row = 0; row < tableWidget->rowCount(); row++)
{
QStringList rowList;
for (int col = 0; col < tableWidget->columnCount(); col++)
{
QTableWidgetItem *item = tableWidget->item(row, col);
if (item != nullptr)
{
rowList << item->text();
}
else
{
rowList << "";
}
}
out << rowList.join(",") << "\n";
}
file.close();
}
}
void loadDataFromCsv(const QString &fileName, QTableWidget *tableWidget)
{
QFile file(fileName);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
int row = 0;
while (!in.atEnd())
{
QString line = in.readLine();
QStringList rowList = line.split(",");
if (rowList.size() > 0)
{
tableWidget->setRowCount(row + 1);
for (int col = 0; col < rowList.size(); col++)
{
QTableWidgetItem *item = new QTableWidgetItem(rowList[col]);
tableWidget->setItem(row, col, item);
}
row++;
}
}
tableWidget->resizeColumnsToContents();
tableWidget->resizeRowsToContents();
file.close();
}
}
```
在关闭页面时调用 `saveDataToCsv` 函数保存数据到 CSV 文件中:
```cpp
void Widget::closeEvent(QCloseEvent *event)
{
saveDataToCsv("data.csv", ui->tableWidget);
event->accept();
}
```
在打开页面时调用 `loadDataFromCsv` 函数从 CSV 文件中读取数据并填充到 QTableWidget 中:
```cpp
void Widget::showEvent(QShowEvent *event)
{
loadDataFromCsv("data.csv", ui->tableWidget);
event->accept();
}
```
这样,在关闭页面后再次打开时,QTableWidget 中的数据就可以继续显示。
阅读全文