首页 > 其他分享 >(二)Qt中使用model/view模式

(二)Qt中使用model/view模式

时间:2023-10-28 12:07:04浏览次数:33  
标签:splitter Qt QTreeView 模型 视图 model QFileSystemModel view

Qt包含两种模型

Qt提供的两个标准模型是QStandardItemModelQFileSystemModel

QStandardItemModel是一个多用途模型,可用于表示列表、表和树视图所需的各种不同的数据结构。同时还保存了数据项

QFileSystemModel是一个维护目录内容信息的模型。它本身不保存任何数据项,只是表示本地文件系统上的文件和目录。

QFileSystemModel提供了一个现成的模型来进行实验,可以很容易地配置以使用现有数据。使用这个模型,我们可以展示如何为现成的视图设置模型,并探索如何使用模型索引操作数据。

在现有模型中使用视图

QListView和QTreeView类是最适合与QFileSystemModel一起使用的视图。下面给出的示例,在树视图中显示目录的内容,与列表视图中的相同信息相邻。这两个视图共享用户的选择,因此选中的项目在两个视图中都被突出显示。

(二)Qt中使用model/view模式_Qt

如下图,设置了一个QFileSystemModel,简单的构造和使用:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);// 创建一个Qt应用程序对象,它管理GUI事件循环和设置
    QSplitter *splitter = new QSplitter;// 创建一个QSplitter(窗口部件),它是一个容器,可以用来在窗口中创建多个视图。

    QFileSystemModel *model = new QFileSystemModel;// 创建一个QFileSystemModel对象,这是一个文件系统模型,可以用来在树形视图或表格视图中显示文件和目录。
    model->setRootPath(QDir::currentPath());// 设置QFileSystemModel的根路径为当前工作目录,setRootPath方法设置模型的文件系统根路径。

创建两个视图,以便以两种不同的方式检查模型中的项:

QTreeView *tree = new QTreeView(splitter);// 创建一个QTreeView对象,这是一个可以显示树形结构的视图。我们将这个视图放入之前创建的QSplitter容器中。

    tree->setModel(model);// 设置QTreeView的模型为之前创建的QFileSystemModel模型。这样,QTreeView就会显示QFileSystemModel的内容。
    tree->setRootIndex(model->index(QDir::currentPath()));// 设置QTreeView的根索引为当前工作目录。这样,QTreeView就会从当前目录开始显示文件系统内容。

    QListView *list = new QListView(splitter);// 创建一个QListView对象,这是一个可以显示列表结构的视图。我们也将这个视图放入之前创建的QSplitter容器中。
    list->setModel(model);// 和设置QTreeView一样,我们设置QListView的模型也为QFileSystemModel。
    list->setRootIndex(model->index(QDir::currentPath()));// 和设置QTreeView一样,我们设置QListView的根索引为当前工作目录。

视图的构造方式与其他部件相同。要想在视图中显示模型中的项目,只需调用它的setModel()函数,将目录模型作为参数即可。我们在每个视图上调用setRootIndex()函数,从文件系统模型中为当前目录传入一个合适的模型索引,从而过滤模型提供的数据。

这里使用的index()函数是QFileSystemModel唯一的。我们给它提供一个目录,它会返回一个模型索引

函数的其余部分只是显示splitter部件中的视图,并运行应用程序的事件循环:

splitter->setWindowTitle("Two views onto the same file system model");// 设置splitter(分栏器)的窗口标题为"Two views onto the same file system model",这将显示在splitter窗口的顶部。

    splitter->show();// 显示splitter窗口,这将使得窗口在屏幕上可见。
    return app.exec();// 执行app应用程序的事件循环,这将使得应用程序开始运行并响应用户的操作。

}

在上面的例子中,我们忽略了如何处理元素的选择。在Item视图中处理选择的部分会更详细地介绍这个主题。

标签:splitter,Qt,QTreeView,模型,视图,model,QFileSystemModel,view
From: https://blog.51cto.com/u_16324960/8068237

相关文章

  • Android入门教程 | RecyclerView使用入门
    想必大家对列表的表现形式已经不再陌生。手机上有联系人列表,文件列表,短信列表等等。本文讲述的是在Android开发中用RecyclerView来实现列表效果。使用步骤引入RecyclerView在app的build.gradle文件中添加引用。我们使用的是androidx包。gradle:dependencies{//........
  • Python时间序列分析库介绍:statsmodels、tslearn、tssearch、tsfresh
    时间序列分析在金融和医疗保健等领域至关重要,在这些领域,理解随时间变化的数据模式至关重要。在本文中,我们将介绍四个主要的Python库——statmodels、tslearn、tssearch和tsfresh——每个库都针对时间序列分析的不同方面进行了定制。这些库为从预测到模式识别的任务提供了强大的工......
  • openapi-generator修改默认生成的Model文件名称
    openapi-generator为各种语言都以抽象类的形式进行了默认配置以Typescript为例,其中的抽象类路径为openapi-generator\modules\openapi-generator\src\main\java\org\openapitools\codegen\languages\AbstractTypeScriptClientCodegen.java其中的toTypescriptTypeName方法则对生......
  • 逆向通达信Level-2 续七 (调试WebView)
    通过窗口找WebView,打开DevTool调试 在WebView hack入控制台。那个,我已经打开了DevTool,算了。 通过pad面板找WebView。 ......
  • Qt之堆栈布局(QStackedLayout)
    一、QStackedLayout概述QStackedLayout是Qt中的一个布局管理器,用于管理多个子窗口或页面的堆叠显示。它允许你在一个固定区域内显示多个子窗口,但每次只显示其中一个子窗口,其他子窗口被堆叠在后面。与QStackedWidget类似,但QStackedLayout是一个布局管理器,可以与其他布局管......
  • iview Dropdown用法事例
    <Dropdowntransfer="true"@on-click="dropdownAction($event,params.row)"><ahref="javascript:void(0)">...</a><Dropdown-menuslot=&qu......
  • wpf webview2动态修改下载文件的下载路径 文件下载路径选择
    通过webview2下载文件时候会将文件保存在用户的默认下载目录,如果想调整成通过弹窗选择下载路径的方式则需要将默认行为做出修改。本文通过CoreWebView2_DownloadStarting这个事件来调整下载路径,基本思路为通过弹窗让用户选择需要保存的路径,如果用户取消了此操作则通过这个事件......
  • octave读取paraview导出的.csv数据失败
    paraview导出数据,再使用octave进行处理,一直报错:octave:X11DISPLAYenvironmentvariablenotsetoctave:disablingGUIfeatureserror:load:failedtoreadmatrixfromfile'uz_030.csv'error:calledfrompostproc-wake_velocity.matline8column5先看一......
  • Qt之停靠窗口(QDockWidget)
    一、QDockWidget概述QDockWidget是Qt中的一个窗口部件,用于创建可停靠的窗口,通常用于构建多文档接口(MDI)或可定制的用户界面。QDockWidget允许用户将窗口停靠在应用程序的主窗口周围,或将其拖动到独立的浮动窗口中。以下是有关QDockWidget的详细介绍和使用方法:QDockWidget......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表
    在我们展示一些参考信息的时候,有所会用树形列表来展示结构信息,如对于有父子关系的多层级部门机构,以及一些常用如字典大类节点,也都可以利用树形列表的方式进行展示,本篇随笔介绍基于WPF的方式,使用TreeView来洗实现结构信息的展示,以及对它的菜单进行的设置、过滤查询等功能的实现逻辑......