引言

Python是一种面向对象的高级动态编程语言,相比于其它如C/C++语言,具有上手快、代码少、开发效率高的特点,Qt是跨平台的C++图形用户界面应用程序开发框架,是当前主流的GUI开发工具之一,其在Python下的绑定是PyQt库。使用“Python+PyQt”架构编写应用软件,可以做到在兼顾软件运行效率的前提下,大大节省时间成本,加快项目的开发进度。

在Qt界面库中,Model/View即模型/视图结构可将界面组件与数据进行分离,是处理数据与界面的一种较好的方法。其中,视图(View)是显示和编辑数据的界面组件,模型(Model)是视图与原始数据的接口。由于数据源与显示界面通过Model/View结构分离开来,因此可将一个数据模型在不同的视图中显示,也可在不修改数据模型的前提下,设计特殊的视图组件。

在Qt中,提供了一些常用的视图组件如QListView、QTreeView、QTableView等,也提供了多种预定义的数据模型,如QStringListModel、QFileSystemModel、QStandItemModel等。

其中,QStringListModel是一种比较简单的用于处理字符串列表的数据模型,它可作为QListView视图组件的数据模型,在界面上显示和编辑字符串列表。下面给出一个在Python语言下使用PyQt界面库,将QStingListModel数据模型结合QListView视图组件进行数据编辑及显示的例子。

示例说明

该例使用QStringListModel作为数据模型,QListView作为视图组件,演示这种Model/View视图结构编辑字符串列表的功能,示例运行界面如下图所示:

在主界面上,窗口左侧包括了对QStringListModel的一些操作按钮及QListView视图组件,右侧QPlainTextEdit中可以显示当前QStringListModel中的内容,以便查看其是否与界面上ListView视图组件上显示的内容一致。最下面一行使用Label控件显示QListView视图组件上当前选中项的行、列信息。

界面设计

界面部分使用设计师设计,关于设计师设计界面的步骤可查看以前的文章,本例保存为“Main.ui”,完成后界面(左边)及窗口中涉及到的所有界面对象元素的布局情况(右边)如下图所示:

主窗口实现代码

主窗口类MainWnd主要实现代码如下图所示:

其主要代码解释如下:

(1)第21-27行,初始化函数。其中,使用QStringListModel类创建一个数据模型实例,使用setStringList函数将一个字符串列表的内容作为数据模型的初始数据内容,使用setModel函数完成数据模型与视图组件的关联,使用setEditTriggers函数设置视图组件的条目是否可以编辑以及如何进入编辑状态,本例设置为双击或选择单击列表项后就进入编辑状态。最后进行了信号与槽函数的关联。

(2)第40-44行,添加项槽函数,在列表的最后一行添加一行新内容“new item”。

(3)第46-50行,插入项槽函数,在列表当前行的前面行添加一行新内容“inserted item”。

(4)第52-54行,删除当前项槽函数,使用removeRow函数删除当前行所在的项。

(5)第56-57行,删除列表所有项槽函数,使用removeRows函数删除整个列表项。

(6)第59-60行,重新初始化列表内容。

(7)第62-63行,当单击视图组件时,其clicked()信号会传递一个QModelIndex类型的参数,利用该参数,在界面下方显示当前列表项的模型索引的行和列信息。

(8)第65-66行,清空主界面右边QPlainTextEdit的内容。

(9)第68-72行,通过数据模型的stringList函获取字符串列表,并在QPlainTextEdit里逐行显示。程序运行时,无论对ListView作了何种编辑和修改,当单击“显示数据模型列表”按钮时,在这儿显示的内容应该与ListView里总是完全相同的,即数据模型里面的数据与界面上显示的内容始终是同步的。

完整测试代码

程序完整测试代码如下图所示:

运行后就会出现本文开头所示的软件界面。

总结

本文给出了在Python+PyQt架构下,关于Model/View即模型/视图结构,最简单的一个QStingListModel数据模型与QListView视图组件相结合进行数据编辑及显示的例子。从这儿可以看出,在Model/View结构中,数据模型与视图组件完全是分离的,可以直接操作数据模型以修改数据,同时,在视图组件中作的修改也会自动保存到数据模型里。

如果这篇文章对你有用的话,请关注+转发+收藏+点赞吧。

pyqt5 qstring在哪个库_PyQt模型/视图结构编程示例:QStringListModel的用法相关推荐

  1. 【Qt】模型/视图结构和数据绑定控件

    模型/视图结构 模型/视图是指处理数据的模型和向用户提供GUI的视图,这是从GUI分离数据的一种结构,又称为MVC(Model-View-Controller). 模型 QAbstractItemMo ...

  2. Qt中模型/视图结构

    8.1 概述 MVC设计模式是起源于Smalltalk的一种与用户界面相关的设计模式.通过使用此模型,可以有效地分离数据和用户界面.MVC设计模式包括三个元素:表示数据的模型 (Model).表示用户 ...

  3. Qt5开发学习之模型/视图结构(十)

    Qt MVC概述 MVC是一种与用户界面相关的设计模式.通过使用此模型,可以有效地分离数据和用户界面.MVC设计模式包含三要素:表示数据的模型(Model).表示用户界面的视图(View)和定义了用户 ...

  4. Qt5入门学习——模型/视图结构

    文章目录 概述 基本概念 简单文件目录浏览器[简单示例] 模型(Model) 自定义模型[示例] 视图(View) 表格数据显示[示例] 代理(Delegate) 利用Delegate设计表格控件[示 ...

  5. pyqt5 qstring在哪个库_从Qt C++类库到PyQt5

    2.6.1 帮助信息的查找 1.在Qt Creator中查找帮助信息 安装PyQt5时不会安装完整的类库帮助文档,PyQt5的在线Reference Guide提供了PyQt5使用中的一些关键技术问题 ...

  6. Qt5模型/视图结构-视图(View)

    实现自定义的View,可继承自QAbstractItemView类,对所需的纯虚函数进行重定义与实现,对于QAbstractItemView类中的纯虚函数,在子类中必须进行重定义,但不一定要实现,可根 ...

  7. QT学习笔记14(Qt模型视图结构)

    一.基础知识 1.MVC设计模式:是一种与用户界面相关的设计模式,通过此模式,可以有效的分离数据和用户界面. MVC包括三个要素: 表示数据的模型(Model):应用程序的对象 表示用户界面的视图(V ...

  8. [转载]Qt之模型/视图(实时更新数据)

    原文地址:Qt之模型/视图(实时更新数据)作者:一去丶二三里 上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变 ...

  9. [转载]Qt之模型/视图(实时更新数据)_vortex_新浪博客

    原文地址:Qt之模型/视图(实时更新数据)作者:一去丶二三里 上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变 ...

最新文章

  1. python基础教程:list转换range()的打印结果
  2. BZOJ 3731: Gty的超级妹子树
  3. Vim-复制选中内容至系统剪贴板,光标移动到指定行的行首和行尾
  4. CSS3中:nth-child和:nth-of-type的区别深入理解。 关于:nth-child和:nth-of-type的区别之前一直没太注意,经深入理解才发现里面其实暗藏玄机...
  5. python matplotlib画折线图出现连线混乱_python使用matplotlib模块绘制多条折线图、散点图...
  6. 读人人都是产品经理__1
  7. php调用at命令,执行AT命令在php中发送短信
  8. 面对 996,程序员如何利用“碎片时间”涨薪?
  9. 设置TOMCAT SESSIONID 字符长度和生成算法
  10. 玩玩Linux云主机-安装MySQL ,The server quit without updating PID file,Linux chown 权限管理
  11. 取代ClubHouse的节奏!这款开源聊天室太好用了
  12. 谷歌地图动画_Google地图上的动画路线
  13. 2019年个人年终总结
  14. 重磅!《中国DevOps现状调查报告(2021年)》正式发布!(附报告获取方式)
  15. openwrt手工配置pptpd
  16. 计算机中数值怎么比较大小,数值比较器,数值比较器的作用和原理是什么?
  17. 单服务器node.js和php性能测试
  18. 【转载】sdcard中平添文件总是提示Failed to push the item(s)Failed to push XXXXX.txt on emulato...
  19. 股市风暴下的雪球架构改造经验分享
  20. 天大2021年秋学期考试《西方经济学》离线作业考核试题

热门文章

  1. 娓娓道来!那些BERT模型压缩方法(一)
  2. python中split拆分数组_Python 数组分割
  3. 栈的应用--中缀表达式转后缀表达式
  4. 关于联合体输出的问题(是否小端模式)
  5. 列表的下标;查找,判断,增加,删除函数
  6. 吴恩达机器学习练习3:Logistic regression(Multi-class Classification)
  7. 《人月神话》读后感1
  8. Java007-面向对象(多态)
  9. Rainbond 5.0正式发布, 支持对接管理已有Kubernetes集群...
  10. dismiss ios pop效果_iOS实现自定义炫酷的弹出视图(popView)