欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Qt模型/视图之基本概念

Qt模型/视图之基本概念

2025/4/22 15:04:45 来源:https://blog.csdn.net/LoveXming/article/details/147293701  浏览:    关键词:Qt模型/视图之基本概念

Qt模型/视图

Qt的模型/视图组成

  • 1.模型(Model)
  • 2.视图(View)
  • 3.代理(Delegate)

  模型负责数据的提取与更新,并将数据提供给视图显示或编辑;视图是应用程序的界面组件,它从模型获得数据项的模型索引,然后通过模型索引获取到实际的数据;代理的功能是让用户定制数据的界面显示和编辑方式,当视图中的数据被编辑时,代理通过模型索引与数据模型通信,并为数据的编辑提供一个合适的编辑器;

常见数据模型种类:

  • 列表模型(List Model)
  • 表格模型(Table Model)
  • 树模型(Tree Model)

模型索引(QModelIndex)的作用:

  数据模型存储的每个一个数据都使用一个模型索引来表示,视图和代理都通过这个模型索引来获取实际的数据,这样有利于表示层和数据获取分离;QModelIndex是对数据模型中一块数据的临时引用,可以用来检索或修改模型中的数据,QModelIndex模型索引提供的存取数据的指针是临时的,因为数据模型随时都可能对内部数据的组织形式进行更改。如果需要使用持久性的索引,则要使用QPresistentModelIndex对象。

  通过model获取QModelIndex:

QModelIndex modelIndex = model->index(row, column, parent);
  • row:行号
  • column:列好
  • parent:父项模型索引

父项的概念

  在Qt的数据模型中,列表模型或表格模型的所有数据项都以根项(Root Item)为父项(Parent Item),所以它们都是顶层数据项,顶层数据项的父模型索引统一用QModelIndex ()来表示。其中比较特殊的是树模型,

  • 树模型中每个数据项都可能拥有自己的父项,它也有可能是其他数据项的父项

项角色

常量描述
Qt::DisplayRole数据被渲染为文本(数据为QString类型)
Qt::DecorationRole数据被渲染为图标等装饰(数据为QColor,QIcon或QPixmap类型)
Qt::EditRole数据可以在编辑器中进行编辑(数据为QString类型)
Qt::ToolTipRole数据显示在数据项的工具提示中(数据为QString类型)
Qt::StatusTipRole数据显示在状态栏中(数据为QString类型)
Qt::WhatsThisRole数据显示在数据项的What’s This?模式下(数据为QString类型)
Qt::SizeHintRole数据项的大小提示,将会应用到视图(数据为QSize类型)

树模型视图的简单程序示例

界面首先拖拽一个TreeView控件,命名为treeView
在这里插入图片描述

// .h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QStandardItemModel>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:void InitMainWindow();private:Ui::MainWindow *ui;QStandardItemModel* m_pModel;
};
#endif // MAINWINDOW_H// .cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);InitMainWindow();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::InitMainWindow()
{m_pModel = new QStandardItemModel(this);// 为视图设置模型ui->treeView->setModel(m_pModel);// 获取模型根项QStandardItem* m_pRootItem = m_pModel->invisibleRootItem();// 创建父项QStandardItem* m_pParentItem = new QStandardItem("Parent");// 创建子项QStandardItem* m_pChildItem = new QStandardItem("Child");// 把子项添加到父项m_pParentItem->appendRow(m_pChildItem);// 把父项添加到根项m_pRootItem->appendRow(m_pParentItem);
}

程序效果:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词