以下是基于Qt框架的C++代码示例,演示如何获取表格中某一列的变化:
#include <QApplication>
#include <QWidget>
#include <QTableView>
#include <QHeaderView>
#include <QAbstractItemView>
#include <QDebug>
class MyTableView : public QTableView
{
public:
MyTableView(QWidget *parent = nullptr) : QTableView(parent)
{
model = new MyTableModel();
setModel(model);
// 设置表头和行列大小调整模式
horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 设置选择模式为单元格选择
setSelectionBehavior(QAbstractItemView::SelectItems);
setSelectionMode(QAbstractItemView::SingleSelection);
}
protected:
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) override
{
QTableView::dataChanged(topLeft, bottomRight, roles);
int column = topLeft.column(); // 获取修改的列号
QList<int> rows;
for (int row = topLeft.row(); row <= bottomRight.row(); ++row) // 获取修改的行号集合
rows.append(row);
foreach(int row, rows)
qDebug() << "Row" << row << ", Column" << column << ":" << model->data(model->index(row,column));
}
private:
QAbstractTableModel *model;
};
class MyTableModel : public QAbstractTableModel
{
public:
int rowCount(const QModelIndex &parent = QModelIndex()) const override { return 4; }
int columnCount(const QModelIndex &parent = QModelIndex()) const override { return 3; }
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
if (role == Qt::DisplayRole || role == Qt::EditRole)
return QString("%1, %2").arg(index.row()).arg(index.column());
else
return QVariant();
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget win;
QVBoxLayout *layout = new QVBoxLayout(&win);
MyTableView *tableview = new MyTableView(&win);
layout->addWidget(tableview);
win.show();
return app.exec();
}
这里我们创建了一个名为MyTableView
的自定义子类,重写了dataChanged
函数来获取用户编辑单元格时的行和列号。我们还创建了一个名为MyTableModel
的数据模型,它只返回单元格的行和列号。
当您运行此代码并编辑表格时,将会看到调试输出窗口中显示哪些单元格被编辑过。如果您要查看完整的单元格值,可以修改数据模型中的data()
函数以返回实际值。