qtablewidget页面关闭再打开数据还在
时间: 2024-04-04 11:31:14 浏览: 22
QTableWidget 是 Qt 中的一种表格组件,它的数据是保存在内存中的,因此在关闭页面后再次打开,数据仍然会存在。
如果您希望在关闭页面后清除数据,可以在关闭事件中手动清除 QTableWidget 的数据,例如:
```python
def closeEvent(self, event):
self.tableWidget.clearContents()
self.tableWidget.setRowCount(0)
```
或者,您可以在打开页面时检查 QTableWidget 是否已经有数据,如果有则清除,例如:
```python
def openEvent(self, event):
if self.tableWidget.rowCount() > 0:
self.tableWidget.clearContents()
self.tableWidget.setRowCount(0)
```
这样可以确保在每次打开页面时都是一个空的 QTableWidget。
相关问题
qtablewidget当页面关闭时数据不没 打开后继续显示页面上
如果您希望在关闭页面后仍然保留 QTableWidget 的数据,可以将数据保存到本地文件或数据库中,在打开页面时再从文件或数据库中读取数据并填充到 QTableWidget 中。
以下是一个简单的例子,将 QTableWidget 的数据保存到 CSV 文件中:
```python
import csv
def save_data_to_csv(filename, tableWidget):
with open(filename, 'w', newline='') as f:
writer = csv.writer(f)
for row in range(tableWidget.rowCount()):
row_data = []
for col in range(tableWidget.columnCount()):
item = tableWidget.item(row, col)
if item is not None:
row_data.append(item.text())
else:
row_data.append('')
writer.writerow(row_data)
def load_data_from_csv(filename, tableWidget):
with open(filename, 'r') as f:
reader = csv.reader(f)
for i, row_data in enumerate(reader):
tableWidget.setRowCount(i+1)
for j, val in enumerate(row_data):
item = QTableWidgetItem(val)
tableWidget.setItem(i, j, item)
```
在关闭页面时调用 `save_data_to_csv` 函数保存数据到 CSV 文件中:
```python
def closeEvent(self, event):
save_data_to_csv('data.csv', self.tableWidget)
```
在打开页面时调用 `load_data_from_csv` 函数从 CSV 文件中读取数据并填充到 QTableWidget 中:
```python
def openEvent(self, event):
load_data_from_csv('data.csv', self.tableWidget)
```
这样,在关闭页面后再次打开时,QTableWidget 中的数据就可以继续显示。
c++ qtablewidget当页面关闭时数据不没 打开后继续显示页面上
如果您希望在关闭页面后仍然保留 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 中的数据就可以继续显示。