QT开发中文网

c++基于qt框架获取tableview某一列的表格变动

以下是基于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()函数以返回实际值。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=2163

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?