MVC的定义我就不说了,使用MVC模式的目的就是为了软件的解耦,提高代码可读性,复用性等。关于如何应用MVC模式,精髓在于如何设计节点。因为数据都是存在于节点中,在模型中是以项item的形式存在着。后面我会分享一下关于节点在实际当中该怎么设计。
这一节 先介绍一下MVC中wxDataViewModal模型及wxDataViewCtrl视图的几个重要的函数功能
wxDataViewModel is the base class for all data model to be displayed by a wxDataViewCtrl.
All other models derive from it and must implement its pure virtual functions in order to define a complete data model. In detail, you need to override wxDataViewModel::IsContainer, wxDataViewModel::GetParent, wxDataViewModel::GetChildren, wxDataViewModel::GetColumnCount, wxDataViewModel::GetColumnType and wxDataViewModel::GetValue in order to define the data model which acts as an interface between your actual data and the wxDataViewCtrl.
以上摘抄自官网文档 这段话的意思就是说,wxDataViewModel是所有datamodel的基类,用于显示在wxDataViewCtrl的数据模型,任何一个DataModel都需要重载以下函数wxDataViewModel::IsContainer, wxDataViewModel::GetParent, wxDataViewModel::GetChildren, wxDataViewModel::GetColumnCount, wxDataViewModel::GetColumnType and wxDataViewModel::GetValue
IsContainer:这是一个判断是否是父节点的函数。
GetParent: 这是一个获取父节点数据的函数。
GetChildren:这是一个获取根节点的子节点数据函数
在wxWidgets中,wxDataViewModal内部实现掉了root根节点,所谓GetChildren 就是相对的,首先 肯定是遍历root根节点的子节点,完成以后看看root子节点是否存在它的子节点(即root的孙节点)。
在wxDataViewCtrl视图中调用ItemAdd函数就是创建root的子项,接着判断是否有子项的子项可以创建。这个重要的是一个节点(node)的类的设计。在第二节会讲到。注意这个函数只是创建item 不会填充数据的。
GetColumnCount 这是一个获取最大列数的函数 重载它指示要展示的列数
GetColumnType: 这是一个获取列类型的函数 也是基本没啥用
GetValue:这是一个将datamodel的数据在View视图中展示的的函数,处理机制就是自顶而下,自左向右逐行填写,简单讲就是从第一行自左往右依次填写。有多少行就会调用几次该函数
wxDataViewModel::GetAttr:这是一个设置每一项数据的文本属性,针对dataViewCtrl来说的获取属性,根据官方文档说明这个函数只会影响到wxDataViewTextRenderer渲染器定义的列,基类返回都是false,即常规属性。
在实际编码树形控件中,还需要设置以下重载这个函数
wxDataViewModel::HasContainerColumns :这是一个是否允许父节点列存在,一般返回 true。
wxDataViewModel::SetValue:这是一个提供用户对控件编辑的函数。一般提供用户操作复选框,来达到某需求。
wxDataViewCtrl::AssociateModel:这是用来将视图和模型关联的。
wxDataViewCtrl::GetTopItem:这是获取屏幕可见的第一项数据
wxDataViewCtrl::EnsureVisible:这是让视图控件的某一项 在屏幕可见。注意这两个函数可用来快速搜索视图中的某一项及对屏幕上可见项的进行批量处理。