基本原理 : 
  Qt 的模型/视图(Model/View)架构将数据的存储和显示分离,提高了代码的可维护性和复用性。 模型(Model) :负责存储和管理数据,提供数据的访问接口,如获取数据、插入数据、修改数据、删除数据等。视图(View) :负责显示数据,不关心数据的存储和操作,只根据模型的数据进行显示。代理(Delegate) :负责在视图中渲染和编辑数据项,提供了一种机制来定制数据的显示和编辑方式,例如使用自定义的部件进行数据的编辑。功能 : 
  是所有项模型的抽象基类,定义了项模型必须实现的接口,如 rowCount、columnCount、data、setData 等,用于提供数据的存储和操作接口。 可以自定义继承自 QAbstractItemModel 的模型类,以满足不同的数据存储和操作需求。 功能 : 
  是所有项视图的抽象基类,提供了显示数据的通用接口,如 setModel 用于关联一个模型,视图会根据模型的数据进行显示和更新。 常见的派生类有 QListView、QTreeView、QTableView 等,分别用于列表、树状、表格形式的数据显示。 功能 : 
  存储一个字符串列表,方便地用于 QListView 和 QComboBox 等视图的数据显示。 # include  <QApplication> # include  <QListView> # include  <QStringListModel> int  main ( int  argc,  char  * argv[ ] ) 
{ 
    QApplication app ( argc,  argv) ; 
    QStringListModel * model =  new  QStringListModel; 
    QStringList stringList; 
    stringList <<  "Item 1"  <<  "Item 2"  <<  "Item 3" ; 
    model-> setStringList ( stringList) ; 
    QListView * listView =  new  QListView; 
    listView-> setModel ( model) ; 
    listView-> show ( ) ; 
    return  app. exec ( ) ; 
} 
代码解释 : 
  创建一个 QStringListModel 并添加一些字符串元素。 创建一个 QListView 并将 QStringListModel 设置为其模型,QListView 将显示字符串列表中的元素。 自定义代理功能 : 
  允许用户自定义数据在视图中的显示和编辑方式,例如使用自定义的部件进行数据的编辑,或者添加一些特定的显示效果。 功能 : 
  提供了默认的数据项显示和编辑功能,可作为自定义代理的基类。 # include  <QApplication> # include  <QListView> # include  <QStyledItemDelegate> # include  <QPainter> # include  <QStyleOptionViewItem> class  CustomDelegate  :  public  QStyledItemDelegate { 
protected : 
    void  paint ( QPainter * painter,  const  QStyleOptionViewItem & option,  const  QModelIndex & index)  const  override 
    { 
        QStyleOptionViewItem opt =  option; 
        initStyleOption ( & opt,  index) ; 
        
        painter-> save ( ) ; 
        painter-> setPen ( Qt:: red) ; 
        painter-> drawText ( opt. rect,  Qt:: AlignCenter,  index. data ( ) . toString ( ) ) ; 
        painter-> restore ( ) ; 
    } 
    QWidget * createEditor ( QWidget * parent,  const  QStyleOptionViewItem & option,  const  QModelIndex & index)  const  override 
    { 
        
        QLineEdit * editor =  new  QLineEdit ( parent) ; 
        return  editor; 
    } 
    void  setEditorData ( QWidget * editor,  const  QModelIndex & index)  const  override 
    { 
        QLineEdit * lineEdit =  qobject_cast < QLineEdit* > ( editor) ; 
        if  ( lineEdit)  { 
            lineEdit-> setText ( index. data ( ) . toString ( ) ) ; 
        } 
    } 
    void  setModelData ( QWidget * editor,  QAbstractItemModel * model,  const  QModelIndex & index)  const  override 
    { 
        QLineEdit * lineEdit =  qobject_cast < QLineEdit* > ( editor) ; 
        if  ( lineEdit)  { 
            model-> setData ( index,  lineEdit-> text ( ) ) ; 
        } 
    } 
    void  updateEditorGeometry ( QWidget * editor,  const  QStyleOptionViewItem & option,  const  QModelIndex & index)  const  override 
    { 
        editor-> setGeometry ( option. rect) ; 
    } 
} ; 
int  main ( int  argc,  char  * argv[ ] ) 
{ 
    QApplication app ( argc,  argv) ; 
    QStringListModel * model =  new  QStringListModel; 
    QStringList stringList; 
    stringList <<  "Item 1"  <<  "Item 2"  <<  "Item 3" ; 
    model-> setStringList ( stringList) ; 
    QListView * listView =  new  QListView; 
    listView-> setModel ( model) ; 
    CustomDelegate * delegate =  new  CustomDelegate; 
    listView-> setItemDelegate ( delegate) ; 
    listView-> show ( ) ; 
    return  app. exec ( ) ; 
} 
代码解释 : 
  自定义 CustomDelegate 类,继承自 QStyledItemDelegate。 paint 方法用于自定义数据项的绘制,这里将文本绘制为红色。createEditor 方法创建自定义的编辑部件(这里是 QLineEdit)。setEditorData 方法将模型数据设置到编辑器中。setModelData 方法将编辑器的数据更新到模型中。updateEditorGeometry 方法设置编辑器的位置和大小。功能 : 
  QFileSystemModel 提供了文件系统的数据模型,可以显示文件和目录。QTreeView 可以用来显示 QFileSystemModel 提供的数据。# include  <QApplication> # include  <QTreeView> # include  <QFileSystemModel> int  main ( int  argc,  char  * argv[ ] ) 
{ 
    QApplication app ( argc,  argv) ; 
    QFileSystemModel * model =  new  QFileSystemModel; 
    model-> setRootPath ( QDir :: homePath ( ) ) ; 
    QTreeView * treeView =  new  QTreeView; 
    treeView-> setModel ( model) ; 
    treeView-> setRootIndex ( model-> index ( QDir :: homePath ( ) ) ) ; 
    treeView-> show ( ) ; 
    return  app. exec ( ) ; 
} 
代码解释 : 
  创建 QFileSystemModel 并设置根路径为用户的主目录。 创建 QTreeView 并将 QFileSystemModel 设置为其模型。 将 QTreeView 的根索引设置为用户主目录,使其显示用户主目录下的文件和目录结构。