Qt 关于 QDataWidgetMapper 与 Model/View 的一些理解

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中的选中!!!

Guess you like

Origin blog.csdn.net/qq_41607336/article/details/118055854