QT使用自定义QTableView

本文介绍了如何在QT中创建一个自定义Delegate类,用于QTableView中的单元格编辑,包括Delegate的.h和.cpp文件实现,以及在MainWindow中如何应用自定义Delegate。
摘要由CSDN通过智能技术生成

创建自定义类Delegate

新Delegate的.h文件

#ifndef SPINBOXDELEGATE_H
#define SPINBOXDELEGATE_H
#include<QItemDelegate>
#include<QDebug>




class Delegate : public QItemDelegate
{
    Q_OBJECT
public:
    Delegate(QObject * parent=0);
    QWidget *createEditor(QWidget *parent,
                          const QStyleOptionViewItem &option,
                          const QModelIndex &index) const override;

    void setEditorData(QWidget *editor, const QModelIndex &index) const override;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;

    void updateEditorGeometry(QWidget *editor,
                              const QStyleOptionViewItem &option,
                              const QModelIndex &index) const override;
};

#endif // SPINBOXDELEGATE_H

Delegate的.cpp文件

#include "delegate.h"
#include<QSpinBox>
#include<QLineEdit>

Delegate::Delegate(QObject * parent):QItemDelegate(parent)
{

}

QWidget *Delegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    //添加代理
    QLineEdit  *spinBox=new QLineEdit(parent);
    spinBox->resize(50,30);
    return spinBox;

}

void Delegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{

  QString value = index.model()->data(index,Qt::EditRole).toString();
  auto qLineEdit =static_cast<QLineEdit *>(editor);

 // qDebug()<<"编辑的值:"<<value;
  qLineEdit->setText(value);


}

void Delegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{

    auto qLineEdit =static_cast<QLineEdit *>(editor);
   // qLineEdit->clear();
    QString  value= qLineEdit->text();
     qDebug()<<"新设置的值:"<<value;
      qDebug()<<"index:"<<index;
      qDebug()<<"第一行:"<<index.siblingAtColumn(0).data().toString();
    model->setData(index,value,Qt::EditRole);

}

void Delegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    //显示在所在的表格区域
   editor->setGeometry(option.rect);
}

在MainWindow文件引用自定义的

 #include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
#include <QTableView>
#include "delegate.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    this->setWindowTitle("标题");
    ui->setupUi(this);
    auto *model2=new QStandardItemModel(7,4,this);
    QStringList header;
    header<<"a"<<"b"<<"c"<<"d";
    model2->setHorizontalHeaderLabels(header);
    for (int row=0;row<7;row++) {

        for (int coumn=0;coumn<4;coumn++) {
            QStandardItem * item=new QStandardItem(QString("%1").arg(row*4+coumn));
            model2->setItem(row,coumn,item);
        }

    }

    auto * delegate=new Delegate();

    ui->tableView->setModel(model2);
    ui->tableView->setItemDelegate(delegate);
    ui->tableView->resize(800,800);


}

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




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,QTableView是一种用于显示表格数据的控件,而QAbstractTableModel是QTableView使用的一种数据模型。如果想要在QTableView中展示自定义的数据,需要自定义一个继承自QAbstractTableModel的数据模型。 自定义QAbstractTableModel需要实现以下几个方法: 1. rowCount():返回数据模型中的行数。 2. columnCount():返回数据模型中的列数。 3. data():返回某一项的数据,可以用来在QTableView中展示数据。 4. setData():设置某一项的数据,可以用来在QTableView中编辑数据。 5. headerData():返回行或列的标签,可以用来在QTableView中显示表头。 6. flags():返回某一项的标志,用来指定该项是否可编辑、是否可选中等。 自定义QAbstractTableModel类后,可以将其与QTableView关联,通过setModel()方法来设置数据模型,使QTableView显示自定义的数据。 下面是一个简单的自定义QAbstractTableModel的例子: ```c++ class MyTableModel : public QAbstractTableModel { public: MyTableModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; Qt::ItemFlags flags(const QModelIndex &index) const override; private: QList<QList<QVariant>> m_data; }; ``` 在这个例子中,自定义的数据模型类为MyTableModel,其中实现了rowCount()、columnCount()、data()、setData()、headerData()和flags()方法。m_data变量用于存储数据。自定义的数据模型类可以在需要使用表格数据的地方创建,并通过setModel()方法将其与QTableView关联起来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值