Qt ModelViewDelegate(模型

编程入门 行业动态 更新时间:2024-10-17 00:18:10

Qt ModelViewDelegate(<a href=https://www.elefans.com/category/jswz/34/1771358.html style=模型"/>

Qt ModelViewDelegate(模型

一、Model (模型) 介绍

Qt Model 是 Qt 的一个重要组件,用于管理和展示数据。它是 Qt 的 Model/View 架构的核心部分,用于将数据模型与其视图相分离,实现数据的高效处理和可视化呈现。

Qt Model 可以理解成一组数据结构,其中包含了待展示的数据,以及有关这些数据的元数据信息,如列名、列类型、数据行数等。Qt Model 还提供了一系列接口,用于访问和操作这些数据,使得开发人员可以轻松地实现数据的增删改查等操作。

Qt Model 支持多种数据模型,包括基于内存、文件、数据库等不同类型的数据源,开发人员可以根据实际需求选择合适的数据模型。此外,Qt Model 也提供了多种视图组件,如 QListView、QTableView、QTreeView 等,用于将数据以不同的方式展示出来,同时也支持自定义视图组件。

lnterView 框架中所有模型都基于抽象基类  QAbstractltemModel 类,此类由:

  • QAbstractListModel
  • QAbstractProxyModel
  • QAbstractTableModel

类继承

二、View (视图) 介绍

Qt View 是一个跨平台的应用程序,用于在多个设备上查看 RTSP 和 HTTP 播放器。它使用Qt框架的嵌入式Web服务器和界面库,为用户提供了一个简单、易用的图形用户界面,支持实时视频流的播放、录像回放、抓拍等功能。Qt View 可以运行在多个操作系统,包括 Windows,Linux,Android 和 iOS 等。它广泛应用于监控系统、视频会议、视频门禁、家庭安防等领域。Qt View 被广泛应用于开源软件中,例如 ZoneMinder、iSpy、Bluecherry 和 Zoneminder-Moonlight。

InterView 框架中的所有视图都基于 抽象 基类 QAbstractltemView 类,此类由

  • QColumnView
  • QHeaderView
  • QListView
  • QTableView
  • QTreeView

类继承

三、Delegate (代理) 介绍

Qt Delegate是一种Qt框架中的重要组件,用于在数据模型和视图之间提供交互性。它可以用于自定义Qt控件的外观和行为,以满足特定的应用程序需求。

Qt Delegate通常用于实现以下功能:

  1. 为视图中的项目创建自定义外观,并定制数据的显示方式。

  2. 在编辑模式下,为单元格提供自定义编辑器以编辑数据。

  3. 实现特定的用户交互行为,如拖放、复制和粘贴等。

lnterView 框架中的所有代理都基于抽象基类  QAbstractltemDelegate 类
此类由

  • QltemDelegate 
  • QStyledltemDelegate

类继承

开发者可以继承这些类,实现自己的Delegate类,并提供自定义的视图和编辑器。Delegate类被应用程序中的QListView、QTableView、QTreeView等视图类调用,以实现数据模型的可视化展示和编辑。

四、Model-View-Delegate(模型-视图-代理) 实操

1.QT当中model-view-delegate(模型-视图-代理),此结构实现数据和界面的分离。

Qt的模型-视图结构分为三部分:模型(mode)-视图(view)-代理(Delegate) ,其中模型与数据源通信,

并为其它部件提供接口;

视图从模型中引用数据条的模型索引(Modellndex),在视图当中,代理负责绘制数据条目,比如编辑条目,代理和模型进行直接通信。

2、模型 (model): 实现自定义模型可以通过QAbstractltemModel类继承,也可以通过QAbstractListModel和QAbstractTableModel类继承实现列表模型或者表格模型


3、视图(view): 实现自定义的视图View,可以继承子QAbstractltemView类,对所需要的虚拟函数进行重定义


4.代理 (delegate) :在表格当中嵌入各种不同的控件,通过表格中控件对编辑的内容进行操作。表格插入控件方式,控件始终显示。

案例分析:实现下图功能

代码示例:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"#include <QApplication>#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QItemSelectionModel>#include <QSplitter>
#include <QDirModel>
#include <QTreeView>
#include <QListView>
#include <QTableView>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 将下面两条语句注释操作// MainWindow w;// w.show();QDirModel model; // 专门用于获取磁盘文件目录的数据模型 类似QFileSystemModel类QTreeView tree; // 树形视图QListView list; // 列表视图QTableView table; // 表视图// 设置数据模型tree.setModel(&model);list.setModel(&model);table.setModel(&model);tree.setSelectionMode(QAbstractItemView::MultiSelection);list.setSelectionModel(tree.selectionModel());list.setSelectionModel(tree.selectionModel());QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&list,SLOT(setRootIndex(QModelIndex)));QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&table,SLOT(setRootIndex(QModelIndex)));QSplitter *qsp=new QSplitter;qsp->addWidget(&tree);qsp->addWidget(&list);qsp->addWidget(&table);qsp->show();qsp->setWindowTitle("模型(Model)--测试操作");return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
}MainWindow::~MainWindow()
{
}

更多推荐

Qt ModelViewDelegate(模型

本文发布于:2023-12-07 09:53:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1670902.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模型   Qt   ModelViewDelegate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!