一、不同的视图显示同一个模型中的数据 1、Qt中标准模型定义(例子中使用表格模型) (1)、获取虚拟根节点 (2)、动态从堆空间申请并创建三个数据项 (3)、分别往三个数据项中放入数据 (4)、将数据项放到模型中 MainWindow。hifndefMAINWINDOWHdefineMAINWINDOWHincludeQtGuiQMainWindowincludeQTableViewincludeQStandardItemModelclassMainWindow:publicQMainWindow{QOBJECTprivate:QStandardItemModelmstanderdModel;QTableViewmtableView;voidinitStanderdModel();voidinitTableModel();public:MainWindow(QWidgetparent0);MainWindow();};endifMAINWINDOWH MainWindow。cppincludeMainWindow。hincludeQStandardItemMainWindow::MainWindow(QWidgetparent):QMainWindow(parent){initStanderdModel();initTableModel();mtableView。setModel(mstanderdModel);}voidMainWindow::initStanderdModel(){QStandardItemrootmstanderdModel。invisibleRootItem();QStandardItemitemAnewQStandardItem();QStandardItemitemBnewQStandardItem();QStandardItemitemCnewQStandardItem();itemAsetData(A);只是往数据项里面放了数据,并没有告诉如何显示itemAsetData(TipA);itemAsetData(HelpA);itemBsetData(B);itemBsetData(TipB);itemCsetData(C);itemCsetData(TipB);itemCsetData(HelpC);rootsetChild(0,0,itemA);itemA、itemB、itemC都是new出来的,这里将数据项rootsetChild(0,1,itemB);加入模型的同时也相当于指定了父组件,不会造成内存泄漏rootsetChild(1,0,itemC);}voidMainWindow::initTableModel(){mtableView。resize(300,100);mtableView。move(10,10);mtableView。setParent(this);}MainWindow::MainWindow(){} main。cppincludeQtGuiQApplicationincludeMainWindow。hintmain(intargc,charargv〔〕){QApplicationa(argc,argv);MainWindoww;w。show();returna。exec();} 二、Qt中的数据角色 1、数据角色的概念 (1)、模型中的数据在视图中的用途(显示方式)可能不同 (2)、模型必须为数据设置特定的数据角色(数据属性) (3)、数据角色用于提示视图数据的作用(直接显示、或者做其它用途) (4)、数据角色是不同视图以同一的风格显示数据的标准 2、Qt中的数据角色定义 3、数据角色的意义(指导视图如何使用数据) (1)、定义了数据在特定系统下的标准用途 (2)、不同的视图可以通过相同的标准显示数据 (3)、注意 A、数据角色只是一个附加的属性,这个属性代表推荐的数据显示方式 B、不同的视图完全可以自由解析或者忽略数据的角色信息(自定义视图时) MainWindow。hifndefMAINWINDOWHdefineMAINWINDOWHincludeQtGuiQMainWindowincludeQTableViewincludeQTreeViewincludeQListViewincludeQStandardItemModelclassMainWindow:publicQMainWindow{QOBJECTprivate:QStandardItemModelmstanderdModel;QTableViewmtableView;QTreeViewmtreeView;QListViewmlistView;voidinitStanderdModel();voidinitTableModel();public:MainWindow(QWidgetparent0);MainWindow();};endifMAINWINDOWH MainWindow。cppincludeMainWindow。hincludeQStandardItemMainWindow::MainWindow(QWidgetparent):QMainWindow(parent,Qt::WindowContextHelpButtonHint){initStanderdModel();initTableModel();mtableView。setModel(mstanderdModel);mtreeView。setModel(mstanderdModel);mlistView。setModel(mstanderdModel);}voidMainWindow::initStanderdModel(){QStandardItemrootmstanderdModel。invisibleRootItem();QStandardItemitemAnewQStandardItem();QStandardItemitemBnewQStandardItem();QStandardItemitemCnewQStandardItem();QStandardItemitemChildnewQStandardItem();itemAsetData(A,Qt::DisplayRole);itemAsetData(TipA,Qt::ToolTipRole);itemAsetData(HelpA,Qt::WhatsThisRole);itemBsetData(B,Qt::DisplayRole);itemBsetData(TipB,Qt::ToolTipRole);itemCsetData(C,Qt::DisplayRole);itemCsetData(TipB,Qt::ToolTipRole);itemCsetData(HelpC,Qt::WhatsThisRole);itemChildsetData(Child,Qt::DisplayRole);itemChildsetData(TipChild,Qt::ToolTipRole);itemChildsetData(HelpChild,Qt::WhatsThisRole);itemCsetChild(0,0,itemChild);rootsetChild(0,0,itemA);itemA、itemB、itemC都是new出来的,这里将数据项rootsetChild(0,1,itemB);加入模型的同时也相当于指定了父组件,不会造成内存泄漏rootsetChild(1,0,itemC);}voidMainWindow::initTableModel(){mtableView。resize(300,100);mtableView。move(10,10);mtableView。setParent(this);mtreeView。resize(300,100);mtreeView。move(10,120);mtreeView。setParent(this);mlistView。resize(300,100);mlistView。move(10,230);mlistView。setParent(this);}MainWindow::MainWindow(){} main。cppincludeQtGuiQApplicationincludeMainWindow。hintmain(intargc,charargv〔〕){QApplicationa(argc,argv);MainWindoww;w。show();returna。exec();} 三、小结 (1)、模型中的数据有附加的角色属性 (2)、数据角色定义了数据显示的标准方式 (3)、数据角色用于提示视图数据的作用 (4)、视图可以自由解析或者忽略数据的角色信息(自定义视图时) 【领QT开发教程学习资料,点击下方链接莬费领取,先码住不迷路】 链接