QDataWidgetMapper的作用
QDataWidgetMapper是应用于 Model(数据模型)与Widget的一个功能类,它的作用是当Model中的Current item(Current index)改变时,刷新对应的若干Widget的值。
QDataWidgetMapper的重要成员函数
-
void addMapping(QWidget *widget, int section)
这个函数用来把widget与section(model中的第section列或第section行所代表的数据联系起来)至于是列还是行由下面这个函数确定。
-
void setOrientation(Qt::Orientation aOrientation)
这个很重要,如下图所示:
有俩种表格表示,当然这是以View的角度看。
在model中维护的项有三个属性确定,行,列,父项,他们的概念与View里的行,列,根项相对应。这个函数设置的是映射时映射模式是model里的行,还是列。
比如对第一张图,我们就要设置 Orientation(方向)为Qt::Horizontal,这样可以实现第一列映射到某一widget,第二列映射到某一widget,第三列映射到某一widget。
否则的话,第一行映射到某一widget,第二行....显而易见,如果这样的话,将会出错,因为第一行映射到某一widget,然而第一行的每一列都不是相同类型的数据。
-
void setSubmitPolicy(SubmitPolicy policy)
这个函数用来确定刷新的方式,有以下俩种值
-
QDataWidgetMapper::AutoSubmit
当widget失去焦点,则自动刷新model中对应的行或列(Orientation 决定)的值。
-
QDataWidgetMapper::ManualSubmit
需要QDataWidgetMapper的实例提交submit()才能刷新model中对应的行或列(Orientation 决定)的值。
-
int currentIndex() const
用来获得当前model中的行或列(Orientation 决定)
-
void setRootIndex(const QModelIndex &index)
这个函数在tree类型的View中很有用,它可以显示不同分支的子项,因为对于TableView或这ListView这种View,他们项的父项都是QModelIndex(),因为他们没有层次结构,而对于Tree他们的顶层项的父项才是QModelIndex(),在顶层项之下的结构,他们都有自己实实在在的父项。所以这个函数可以说专门为了Tree结构服务的,(当然你也可以自己整个有层次的View,它也可以为你的层次的View服务)
-
void setItemDelegate(QAbstractItemDelegate *delegate)
这个函数用来设置item的delegate
注意
是model与widget建立联系,不是view与widget建里联系!!而且QDataMapper 的setCurrentIndex不负责model中的选中!!!