首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

26.QT-模型视图之自定义委托

在上一章学习 25.QT-模型视图 后,本章接着学习视图委托 ---- 视图委托(Delegate)简介 由于模型负责组织数据,而视图负责显示数据,所以当用户想修改显示的数据,就要通过视图中的委托来完成...QWidget * createEditor( QWidget * parent, QStyleOptionViewItem & option, QModelIndex & index ) ; //创建编辑器...// hint 参数用来指定当用户完成编辑后,应该显示什么标记,用来提示用户已完成编辑 void commitData ( QWidget * editor ) ; //当完成编辑数据后,发送该信号...; void setModelData( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index...成员函数 editorEvent中处理交互事件,比如判断鼠标是否双击,以及更改模型数据等 其中QApplication::style()->drawControl()函数参数如下所示: QApplication

2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Qt 学习之路 2(45):模型

model/view 架构中,model 提供一种标准接口,供视图和委托访问数据。 Qt 中,这个接口由QAbstractItemModel类进行定义。...由于模型随时可能重新组织其内部的结构,因此模型索引很可能变成不可用的,此时,就不应该保存这些数据。如果你需要长期有效的数据片段,必须创建持久索引。持久索引保证其引用的数据及时更新。...此时,我们获得的是一个索引对象(回忆一下,通过索引我们可以获取具体信息): 1 QModelIndex index = model->index(row, column, ...); 模型提供了一个简单的接口...那么,我们就应该使用下面的代码获取 B 的索引: 1 QModelIndex indexB = model->index(1, 0, indexA); 由此我们看到,如果只有行号和列号两个参数,B 的行号是...(视图和委托)请求才会被创建; 如果使用index()函数请求获得一个父项的可用索引,该索引会指向模型中这个父项下面的数据项。

84720

C++ Qt开发:数据库与TableView多组件联动

Qt中,通常我们不会在TableView等组件中保存数据,一般会将这些数据存储至数据库或者是文件中保存,当使用时则动态的在数据库中调出来,以下案例将实现,当用户点击并选中TableView组件内的某一行...以下是 QItemSelectionModel 的一些常用方法,概述成表格形式: 方法 描述 QItemSelectionModel(QAbstractItemModel *model) 构造函数,创建一个选择模型并关联指定的数据模型...select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command) 根据给定的 QModelIndex 对象和选择标志执行选择操作...以下是 QDataWidgetMapper 的一些主要方法,概述成表格形式: 方法 描述 QDataWidgetMapper(QObject *parent = nullptr) 构造函数,创建一个数据映射器对象...QDataWidgetMapper 创建 QDataWidgetMapper 对象 dataMapper,设置提交策略为自动提交。

32710

Qt ModelView教程——只读Table

一直想学习Qt Model/View,最终还是看的官方教程,现在将官方教程重新梳理下。 每个UI开发人员都应该了解Model/View编程!可见Model/ViewUI编程中的重要性!...由于视图类不知道数据的结构,因此需要提供包装器以使数据符合QAbstractItemModel接口【译者注:这就是为什么要setMode】。...View使用该接口进行读取和写入数据,实现QAbstractItemModel的类的任何实例都称为模型【译者注:什么是Model】。...我们创建MyModel的实例并使用tableView.setModel(&myModel), 将其指针传递给tableView ,tableView将调用它收到的指针获得以下信息: 应显示多少行和多少列...所以我比较喜欢知道为什么这么做、这么做应该会有一个什么样的结果。

1.9K20

QTableView 一列添加两个按钮

QTableView的一列里添加两个按钮,之前添加一个按钮的思路是一样的,只是计算了一下按钮的宽,放两个按钮而已。...点击第二个按钮弹出but2 + 当前行 下面是主要实现 继承自 QItemDelegate 主要是实现 了它的painter方法,把两个自定义的按钮绘制到视图并保存 还有editorEvent事件,用来处理点击事件,点击我们算一下鼠标的坐标在哪个按钮下...&index) const; bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem...QStyle::CE_PushButton, buttons->second, painter); } bool ButtonDelegate::editorEvent(QEvent *event, QAbstractItemModel...index.isValid()) return Qt::NoItemFlags; Qt::ItemFlags flag = QAbstractItemModel::flags(

3.1K90

C++ Qt开发:QItemDelegate自定义代理组件

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStyledItemDelegate...Qt中,QStyledItemDelegate 类是用于创建自定义表格视图(如QTableView和QTableWidget)的委托类,允许你自定义表格中每个单元格的外观和交互。...自定义代理中QAbstractItemDelegate是所有代理类的抽象基类,它用于创建自定义的项委托。提供了一个基本的框架,使得可以定制如何在视图中绘制和编辑数据项。...我们继承任何组件都必须要包括如下4个函数:CreateEditor() 用于创建编辑模型数据的组件,例如(QSpinBox组件)SetEditorData() 从数据模型获取数据,以供Widget组件进行编辑...,用于控制数据项视图中的外观和交互行为。

36910

25.QT-模型视图

模型视图设计模式的核心思想 使模型(数据)与视图(显示)相分离 模型只需要对外提供标准接口存取数据,无需数据如何显示 视图只需要自定义数据的显示方式,无需数据如何组织存储 当数据发生改变,会通过信号通知视图...当用户与视图进行交互,会通过信号向模型发送交互信息  QT中提供了以下几种预定义模型: ?...QAbstractListModel:用来创建一维列表模型 QStandardItemModel:用来存储定制数据的通用模型 QAbstractTableModel: 用来创建二维列表模型 常用的视图类层次结构...其中index()是个重载函数,用来获取QModelIndex 索引值,完整的index()函数如下所示: QModelIndex QAbstractItemModel::index ( int row.../通过索引值获取文件路径 bool isDir ( const QModelIndex & index ) ; //通过索引值,判断是否是目录 int columnCount (

1.5K20

QTreeView使用总结13,自定义model示例,大大优化性能和内存

其中学生信息原始数据只有姓名、三门课成绩,需显示的列多一些,包含: 班级/姓名、语文、数学、外语、总分、平均分、是否合格、是否评优 其中后面几列是根据学生成绩计算得出的: 所有课成绩都>60则合格,...我们写一个自定义的TreeModel,继承自该类,实现里面的一些重载函数: #include "TreeItem.h" #include #include <QModelIndex...QModelIndex index(int row, int column,const QModelIndex &parent = QModelIndex()) const override;...QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &...比如我们只存储了基本的3门课程分数,其他内容全为显示视图向我们的自定义model获取数据实时计算得出的! 可能你会担心,这样计算量会不会变大,导致反应速度变慢?

1.7K30

60.QT-QabstractTableModel模型、重写sort方法排序

:ItemIsEditable(可编辑属性) //然后当我们双击,会默认创建一个编辑组件(这是由 delegate 完成的)然后delegate会调用QAbstractTableModel ::data...EditRole)读取默认编辑值 //当我们编辑完成后, delegate会调用QAbstractTableModel :: setData (index, value, Qt::EditRole)告诉我们是否保存数据...如果对于可调整行列的模型,可以重写insertRows()、removeRows()、insertColumns()、removeColumns().实现这些函数,还需要调用合适的父类函数,用来通知...::SortOrder order = Qt::AscendingOrder); //当用户点击标题进行降序/升序排序时,会调用该方法 //或者调用QtableView->sortByColumn(),...{ return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; //设置item可编辑 } void CustomModel

2.9K51

C++ Qt开发:StandardItemModel数据模型组件

QStandardItemModel 是 Qt 中用于存储标准项数据的模型类之一,它继承自 QAbstractItemModel 类。...bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) 指定父项下插入行。...以下是代码片段的一些说明: 创建 QStandardItemModel 对象,并设置列数为 3。 为表头设置标签,分别是 "账号"、"用户"、"年龄"。 将模型设置为 QTableView。...这样,就创建了一个包含表头和数据的 QTableView,并将其显示 MainWindow 中。...对于每行的最后一列,该列是可检查的,需要创建 QStandardItem,并设置为可检查状态。根据数据判断是否选中,并设置相应的检查状态。 将 QStandardItem 设置到模型的相应行列位置。

24210

C++ Qt开发:TableView与TreeView组件联动

本章我们继续实现表格的联动效果,当读者点击TableView或TreeView中的某一行,我们让其实现自动跟随功能,且当用户修改行中特定数据也让其动态的跟随改变,首先绘制一个主界面如图,分别放置两个组件框...*model, QObject *parent = nullptr)构造函数,创建一个与指定模型关联的 QItemSelectionModel 对象。...void select(const QModelIndex &topLeft, const QModelIndex &bottomRight, QItemSelectionModel::SelectionFlags...MainWindow构造函数中,我们以此执行如下关键部分,来实现对主界面的初始化工作;创建模型和选择模型首先创建一个包含4行5列的 QStandardItemModel 模型,并为其创建了一个 QItemSelectionModel...QStandardItem 对象并将其添加到模型的相应位置。

31810
领券