您的位置:首页 > 娱乐 > 明星 > qt表格模型视图

qt表格模型视图

2024/10/6 22:23:38 来源:https://blog.csdn.net/cqltbe131421/article/details/140684087  浏览:    关键词:qt表格模型视图

Qt 提供了一套强大的模型/视图框架,允许你以一种非常灵活和高效的方式显示和处理数据。在 Qt 中,表格视图(TableView)和模型(TableModel)是这种框架的一部分,常用于显示和编辑表格数据。

以下是一些基本的概念和步骤,帮助你理解如何在 Qt 中使用表格模型和视图:

  1. 模型(Model)
    模型是数据的抽象表示。在 Qt 中,模型负责存储数据,并提供一种方式来访问这些数据。QAbstractTableModel 是一个常用的基类,用于创建自定义的表格模型。

  2. 视图(View)
    视图是模型的可视化表示。QTableView 是一个表格视图,显示模型中的数据,并允许用户与数据进行交互。

  3. 代理(Delegate)
    代理用于自定义视图中的单元格的显示和编辑方式。QStyledItemDelegate 或自定义的 QItemDelegate 可以用于此目的。

  4. 编辑器(Editor)
    编辑器是用于编辑单元格的组件。例如,QLineEdit 可以用于编辑文本。

  5. 选择模型(Selection Model)
    选择模型用于管理用户在视图中的选择。请添加图片描述

#include "mytablemodel.h"
#include <QtMath>
#include <QColor>MyTableModel::MyTableModel(QObject *parent) : QAbstractTableModel(parent)
{m_columnNum=9;
}void MyTableModel::setInitData(QList<CellInfo*>& data)
{//重置model数据之前调用beginResetModel,此时会触发modelAboutToBeReset信号beginResetModel();//重置model中的数据m_datas = data;m_rowNum = ceil(data.size()*1.0/m_columnNum);   //行数=数据总数/列数,然后向上取整//数据设置结束后调用endResetModel,此时会触发modelReset信号endResetModel();
}int MyTableModel::rowCount(const QModelIndex &parent) const
{if (parent.isValid()) {return 0;} else {return m_rowNum;}
}int MyTableModel::columnCount(const QModelIndex &parent) const
{if (parent.isValid()) {return 0;} else {return m_columnNum;}
}QVariant MyTableModel::data(const QModelIndex &index, int role) const
{if (!index.isValid()) {return QVariant();}if(index.row()*m_columnNum+index.column() < m_datas.count()){if (role == Qt::DisplayRole ||  role == Qt::EditRole) {return m_datas[index.row()*m_columnNum+index.column()]->content;//数据的呈现形式}else if(role == Qt::BackgroundColorRole){return m_datas[index.row()*m_columnNum+index.column()]->bgColor;//单元格背景色}else if (role == Qt::TextAlignmentRole) {    //对其方式return Qt::AlignCenter;}else if(role == Qt::ToolTipRole){return m_datas[index.row()*m_columnNum+index.column()]->toolTip;//数据的提示信息}else if(role == Qt::UserRole){return QVariant::fromValue(m_datas[index.row()*m_columnNum+index.column()]);}}return QVariant();
}Qt::ItemFlags MyTableModel::flags(const QModelIndex &index) const
{if (!index.isValid())return Qt::NoItemFlags;return Qt::ItemIsEnabled|Qt::ItemIsSelectable|Qt::ItemIsEditable;
}bool MyTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{if(index.row()*m_columnNum+index.column() < m_datas.count()){if (index.isValid() && role == Qt::EditRole){m_datas[index.row()*m_columnNum+index.column()]->content = value.value<QString>();emit dataChanged(index, index, QVector<int>() << role);                     //发送信号触发刷新return true;}if (index.isValid() && role == Qt::BackgroundColorRole){m_datas[index.row()*m_columnNum+index.column()]->bgColor = value.value<QColor>();emit dataChanged(index, index, QVector<int>() << role);                     //发送信号触发刷新return true;}}return false;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com