Qt Model View 框架

QAbstractItemModel定义了Model的标准接口。QAbstractItemModel及其派生类均以表格的形式提供访问数据。data()访问数据的接口,QModelIndex是存储Model表格的索引,index.row()和index.column()可以得到索引中指向的行或列。role是一个枚举代表了数据的渲染方式,QVariant是变体型可以被转换为任意Qt兼容的数据类型。setData()写入数据的接口。dataChanged信号。
摘要由CSDN通过智能技术生成

Model-View及Qt实现#

Model-View-Controller架构最早出现在SmallTalk语言中,至今出现了很多变体。

Model是负责维护数据(如管理数据库),View负责显示与用户交互(如各种界面),Controller将控制业务逻辑。这种分层的做法在大型程序中使得数据、逻辑与界面分离,便于维护更新。

Qt引入了与MVC架构相似的模式Model-View架构,并加入了代理(delegate),用于自定义数据的编辑和渲染。

因为架构中的Model以表格的抽象方式访问数据,事实上并非Model-View的最佳选择。

Qt中Model,View,Delegate均由抽象类定义,并通过信号槽进行交互:

  • Model的信号通知View数据发生了改变
  • View的信号通知用户交互事件
  • Delegate的信号在编辑数据时用于通知Model和View的状态

QAbstractItemModel是所有Model的基类,它定义了View和Delegate访问数据的接口。

模型并不存储数据,而是通过与数据源交互得到数据。数据源包括数据库,文件,内存中的对象以及IO设备。

Qt 内置了许多标准模型:

  • QStringListModel:存储简单的字符串列表。
  • QStandardItemModel:可以用于树结构的存储,提供了层次数据。
  • QFileSystemModel:本地系统的文件和目录信息。
  • QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel:存取数据库数据。

如果这些标准模型不能满足需要,可以继承QAbstractItemModel创建新的Model。

QAbstractListModel或QAbstractTableModel提供了一些基本的实现,继承它们可能是更好的选择。

QAbstractItemView是所有View的基类。Qt 还提供了一系列标准的视图:QListView用于显示列表,QTableView用于显示表格,QTreeView用于显示层次数据,它们与List,Table, Tree这些布局在一定程度上对应。

QAbstractItemDelegate则是所有委托的抽象基类。自 Qt 4.4 之后,默认的委托实现是QStyledItemDelegate。但是,QStyledItemDelegate和QItemDelegate都可以作为视图的编辑器,二者的区别在于,QStyledItemDelegate使用当前样式进行绘制。在实现自定义委托时,推荐使用QStyledItemDelegate作为基类,或者结合 Qt style sheets。

QListWidget,QtreeWidget,QTableWidget#

基于MVC架构,Qt提供了QListWidget,QtreeWidget,QTableWidget三个可视化组件,它们均继承了相应的View类,集成了Model-View的功能,程序员可以方便地使用这些类进行开

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值