Как мне обновить файл CSV, когда ячейка была обновлена ​​в QTableWidget?

У меня есть QTableWidget с несколькими строками. Когда пользователь редактирует ячейку, я хочу, чтобы данные, которые он редактировал, автоматически обновлялись в CSV-файле. Я знаю, как обновить файл CSV, но я не могу понять, как распознать, когда данные были отредактированы, и извлечь их из ячейки. Как узнать, когда изменились данные?

графический интерфейс пользователя

ОБНОВИТЬ: @Gluttton — я использую QTableWidget внутри главного окна & Я создаю элементы, используя цикл for (см. Оба ниже). Я перезаписываю элемент при создании таблицы. Как я могу сослаться на предмет, если я не храню его?

Основной класс

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->updateDataSummary();
}

MainWindow::~MainWindow()
{
delete ui;
}

....

for (int x = 0; x < rowOfData.size(); x++)
{
rowData = rowOfData.at(x).split(",");
if((ui->table_Data->rowCount() - x) == 0) ui->table_Data->insertRow(x);
for (int y = 0; y < rowData.size(); y++)
{
QTableWidgetItem *item = new QTableWidgetItem(rowData[y],QTableWidgetItem::Type);
if( y < 43 ) item->setFlags(item->flags() ^ Qt::ItemIsEditable);
ui->table_Data->setItem(x,y,item);
ui->table_Data->repaint();
}
}

@Glutton — Спасибо за вашу помощь! Я сделал две модификации кода, который вы показали ниже. Вы можете увидеть изменения, которые я сделал в коде ниже.

connect (ui->table_Data, SIGNAL ( itemChanged(QTableWidgetItem *) ), this, SLOT ( onItemChanged(QTableWidgetItem *) ) );

....

void MainWindow::onItemChanged( QTableWidgetItem * item)
{
// Where?
int column = item->column ();
int row    = item->row ();
qDebug () << "Data in item [" << column << "] ["<< row << "was changed.";
}

1

Решение

Вы должны подписаться на сигнал:

void QTableWidget::itemChanged ( QTableWidgetItem * item )

через itemВы можете получить доступ к data, row а также column:

// In header file.
class MainWindow : public QWidget
{
Q_OBJECT
public:
MainWindow (QWidget *  parent = NULL);
QTableWidget * table_data;
...
protected slots:
void onItemChanged ( QTableWidgetItem *);
...
};

// In source file.
#include <QDebug>

MainWindow::MainWindow (QWidget *  parent)
{
table_data = new QTableWidget (this);
connect (table_data, SIGNAL (itemChanged ( QTableWidgetItem *) ), this, slot (onItemChanged ( QTableWidgetItem *) ) );
}void MainWindow::onItemChanged ( QTableWidgetItem * item)
{
// Where?
int column = item->column ();
int row    = item->row ();
// What?
QVariant   = item->data ();
qDebug () << "Data in item [" << column << "] ["<< row << "] was changed.";
}
3

Другие решения


По вопросам рекламы [email protected]