1

複数の行を持つ QTableWidget があります。ユーザーがセルを編集すると、編集したデータが csv ファイルで自動的に更新されるようにします。csvファイルを更新する方法はわかっているのですが、いつデータが編集されたのかを認識してセルから引き出す方法がわかりません。データが変更されたことをどのように認識できますか?

GUI

更新: @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 - 助けてくれてありがとう!以下に示したコードに2つの変更を加えました。以下のコードで行った変更を確認できます。

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.";
}
4

1 に答える 1

3

シグナルで購読する必要があります:

void QTableWidget::itemChanged ( QTableWidgetItem * item )

、およびitemにアクセスできます。datarowcolumn

// 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.";
}
于 2014-06-17T18:38:44.343 に答える