Qt开发模型视图设计模式(下)
一、不同的视图显示同一个模型中的数据
1、Qt中标准模型定义(例子中使用表格模型)
(1)、获取 虚拟根节点
(2)、动态从堆空间申请并 创建三个数据项
(3)、分别往 三个数据项中放入数据
(4)、 将数据项放到模型中
MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include class MainWindow : public QMainWindow { Q_OBJECT private: QStandardItemModel m_standerdModel; QTableView m_tableView; void initStanderdModel(); void initTableModel(); public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; #endif // MAINWINDOW_H
MainWindow.cpp #include "MainWindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { initStanderdModel(); initTableModel(); m_tableView.setModel(&m_standerdModel); } void MainWindow::initStanderdModel() { QStandardItem* root = m_standerdModel.invisibleRootItem(); QStandardItem* itemA = new QStandardItem(); QStandardItem* itemB = new QStandardItem(); QStandardItem* itemC = new QStandardItem(); itemA->setData("A");//只是往数据项里面放了数据,并没有告诉如何显示 itemA->setData("Tip A"); itemA->setData("Help A"); itemB->setData("B"); itemB->setData("Tip B"); itemC->setData("C"); itemC->setData("Tip B"); itemC->setData("Help C"); root->setChild(0, 0, itemA);//itemA、itemB、itemC都是new出来的,这里将数据项 root->setChild(0, 1, itemB);//加入模型的同时也相当于指定了父组件,不会造成内存泄漏 root->setChild(1, 0, itemC); } void MainWindow::initTableModel() { m_tableView.resize(300,100); m_tableView.move(10,10); m_tableView.setParent(this); } MainWindow::~MainWindow() { }
main.cpp #include #include "MainWindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
二、Qt中的数据角色
1、数据角色的概念
(1)、模型中的数据 在视图中的用途(显示方式)可能不同
(2)、 模型 必须为数据设置特定的数据角色(数据属性)
(3)、数据角色用于 提示视图数据的作用( 直接显示、或者做其它用途 )
(4)、数据角色是 不同视图以同一的风格显示数据的标准
2、Qt中的数据角色定义
3、数据角色的意义( 指导视图如何使用数据 )
(1)、定义了数据 在特定系统下的标准用途
(2)、不同的视图可以 通过相同的标准 显示数据
(3)、注意
A、数据角色只是一个 附加的属性, 这个属性代表推荐的数据显示方式
B、不同的视图 完全可以自由解析或者忽略数据的角色信息 (自定义视图时)
MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include class MainWindow : public QMainWindow { Q_OBJECT private: QStandardItemModel m_standerdModel; QTableView m_tableView; QTreeView m_treeView; QListView m_listView; void initStanderdModel(); void initTableModel(); public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; #endif // MAINWINDOW_H
MainWindow.cpp #include "MainWindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent, Qt::WindowContextHelpButtonHint) { initStanderdModel(); initTableModel(); m_tableView.setModel(&m_standerdModel); m_treeView.setModel(&m_standerdModel); m_listView.setModel(&m_standerdModel); } void MainWindow::initStanderdModel() { QStandardItem* root = m_standerdModel.invisibleRootItem(); QStandardItem* itemA = new QStandardItem(); QStandardItem* itemB = new QStandardItem(); QStandardItem* itemC = new QStandardItem(); QStandardItem* itemChild = new QStandardItem(); itemA->setData("A", Qt::DisplayRole); itemA->setData("Tip A", Qt::ToolTipRole); itemA->setData("Help A", Qt::WhatsThisRole); itemB->setData("B", Qt::DisplayRole); itemB->setData("Tip B", Qt::ToolTipRole); itemC->setData("C", Qt::DisplayRole); itemC->setData("Tip B", Qt::ToolTipRole); itemC->setData("Help C", Qt::WhatsThisRole); itemChild->setData("Child", Qt::DisplayRole); itemChild->setData("Tip Child", Qt::ToolTipRole); itemChild->setData("Help Child", Qt::WhatsThisRole); itemC->setChild(0, 0, itemChild); root->setChild(0, 0, itemA);//itemA、itemB、itemC都是new出来的,这里将数据项 root->setChild(0, 1, itemB);//加入模型的同时也相当于指定了父组件,不会造成内存泄漏 root->setChild(1, 0, itemC); } void MainWindow::initTableModel() { m_tableView.resize(300,100); m_tableView.move(10,10); m_tableView.setParent(this); m_treeView.resize(300,100); m_treeView.move(10,120); m_treeView.setParent(this); m_listView.resize(300,100); m_listView.move(10,230); m_listView.setParent(this); } MainWindow::~MainWindow() { }
main.cpp #include #include "MainWindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
三、小结
(1)、模型中的数据 有附加的角色属性
(2)、数据角色 定义了数据显示的标准方式
(3)、数据角色用于 提示视图数据的作用
(4)、视图可以 自由解析或者忽略数据的角色信息(自定义视图时)
【领QT开发教程 学习资料,点击下方链接莬费领取↓↓ ,先码住不迷路~】
「链接」
中国贸易顺差再创纪录!拿走全球三分之一,都卖些啥?能挣到钱?当今世界,谁是世界第一制造业大国?谁是世界第一贸易大国?很多人不知道,这两个问题的答案,其实都是中国。2021年,中国对外贸易进口达到了2。68万亿,而出口额更多,直接达到了3。3
突然失联,退休两年的他不保险了?一生转战保险界的万峰,却可能落下不保险的下场?作者隋坤近日,前新华保险总裁万峰失联的消息引发大量关注。去年11月初还与记者谈笑风生的万峰,却在当月底忽然失联。媒体前公司前同事同时联
韧性成了达沃斯论坛高频词新华社瑞士达沃斯1月19日电(记者聂晓阳)联合国秘书长古特雷斯18日在世界经济论坛2023年年会上发表演讲说我们的世界在许多方面都受到一场完美风暴的困扰。论坛期间,不少嘉宾也表示,
新年普通人如何登上胡润百富榜?小编声明本文均以胡润百富榜上公布的数据为数据源胡润百富榜单,本文以百富们的财富值为分析依据,论点仅为小编一家之言,仅供分享探讨。百富们也穷了官方数据显示,2022年我国GDP达12
康美重整计划通过等于独董免责?广东青狮云岸律师事务所罗锦荣叶益力2021年11月12日,广州中院作出国内首宗特别代表人提起诉讼的证券虚假陈述责任纠纷一审判决(下称民事判决),判决康美药业赔偿证券投资者共计24。
小米汽车进展到了哪里?雷军已经在跑冬季测试了2022年,小米虽然赚得不多,但也花了不少。2022年前三个季度,小米一直在大肆招人,相较于二季度,三季度仅员工薪酬开支就多了2亿元。以智能汽车领域为例,小米在半年的时间里新增了6
省人大代表张立平将报告蓝图转化为武都区经济社会高质量发展的生动实践本网记者程健张兰琴高正武2023年甘肃省两会正在有序进行中,省人大代表张立平审议政府工作报告时说,报告总结成绩实事求是,工作部署符合实际,政府建设凸显实干,是一份求真务实突出重点,
浙商财险被通报偿付能力数据不真实综合成本率高企致多年亏损银保监会通报浙商财险存在偿付能力数据不真实的问题。此外,公司综合成本率连续三季度超过100,累计亏损达1。47亿元。中国科技投资张婷龙秋月日前,银保监会发布关于四家保险公司偿付能力
盘江电投天能公司高质量发展蹄疾步稳2022年,盘江电投天能公司夯基础创模式促改革谋发展,攻坚克难,勇毅前行,高质量发展迈出了坚实步伐。全年生产焦炭201。06万吨,实现营业收入68。3亿元,职工人均薪酬同比增加15
兰州助剂厂股份有限公司正式揭牌1月18日,兰州助剂厂股份有限公司在兰州新区正式揭牌。此举标志着中国有机过氧化物第一厂兰州助剂厂已经顺利完成混合所有制改制,为企业上市奠定了基础。甘肃科技集团表示,将借助股改上市绿
与Arceilk合资,惠而浦让出欧洲非洲及中东业务主导权路透社2023年1月17日消息,美国家电制造商惠而浦正在将欧洲的业务并入竞争对手土耳其Arcelik公司,以降低在欧洲市场的风险敞口。惠而浦表示,已同意将中东和非洲的业务出售给土耳