pyqt5 qstring在哪个库_PyQt模型/视图结构编程示例:QStringListModel的用法
引言
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的用法相关推荐
- 【Qt】模型/视图结构和数据绑定控件
模型/视图结构 模型/视图是指处理数据的模型和向用户提供GUI的视图,这是从GUI分离数据的一种结构,又称为MVC(Model-View-Controller). 模型 QAbstractItemMo ...
- Qt中模型/视图结构
8.1 概述 MVC设计模式是起源于Smalltalk的一种与用户界面相关的设计模式.通过使用此模型,可以有效地分离数据和用户界面.MVC设计模式包括三个元素:表示数据的模型 (Model).表示用户 ...
- Qt5开发学习之模型/视图结构(十)
Qt MVC概述 MVC是一种与用户界面相关的设计模式.通过使用此模型,可以有效地分离数据和用户界面.MVC设计模式包含三要素:表示数据的模型(Model).表示用户界面的视图(View)和定义了用户 ...
- Qt5入门学习——模型/视图结构
文章目录 概述 基本概念 简单文件目录浏览器[简单示例] 模型(Model) 自定义模型[示例] 视图(View) 表格数据显示[示例] 代理(Delegate) 利用Delegate设计表格控件[示 ...
- pyqt5 qstring在哪个库_从Qt C++类库到PyQt5
2.6.1 帮助信息的查找 1.在Qt Creator中查找帮助信息 安装PyQt5时不会安装完整的类库帮助文档,PyQt5的在线Reference Guide提供了PyQt5使用中的一些关键技术问题 ...
- Qt5模型/视图结构-视图(View)
实现自定义的View,可继承自QAbstractItemView类,对所需的纯虚函数进行重定义与实现,对于QAbstractItemView类中的纯虚函数,在子类中必须进行重定义,但不一定要实现,可根 ...
- QT学习笔记14(Qt模型视图结构)
一.基础知识 1.MVC设计模式:是一种与用户界面相关的设计模式,通过此模式,可以有效的分离数据和用户界面. MVC包括三个要素: 表示数据的模型(Model):应用程序的对象 表示用户界面的视图(V ...
- [转载]Qt之模型/视图(实时更新数据)
原文地址:Qt之模型/视图(实时更新数据)作者:一去丶二三里 上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变 ...
- [转载]Qt之模型/视图(实时更新数据)_vortex_新浪博客
原文地址:Qt之模型/视图(实时更新数据)作者:一去丶二三里 上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变 ...
最新文章
- python基础教程:list转换range()的打印结果
- BZOJ 3731: Gty的超级妹子树
- Vim-复制选中内容至系统剪贴板,光标移动到指定行的行首和行尾
- CSS3中:nth-child和:nth-of-type的区别深入理解。 关于:nth-child和:nth-of-type的区别之前一直没太注意,经深入理解才发现里面其实暗藏玄机...
- python matplotlib画折线图出现连线混乱_python使用matplotlib模块绘制多条折线图、散点图...
- 读人人都是产品经理__1
- php调用at命令,执行AT命令在php中发送短信
- 面对 996,程序员如何利用“碎片时间”涨薪?
- 设置TOMCAT SESSIONID 字符长度和生成算法
- 玩玩Linux云主机-安装MySQL ,The server quit without updating PID file,Linux chown 权限管理
- 取代ClubHouse的节奏!这款开源聊天室太好用了
- 谷歌地图动画_Google地图上的动画路线
- 2019年个人年终总结
- 重磅!《中国DevOps现状调查报告(2021年)》正式发布!(附报告获取方式)
- openwrt手工配置pptpd
- 计算机中数值怎么比较大小,数值比较器,数值比较器的作用和原理是什么?
- 单服务器node.js和php性能测试
- 【转载】sdcard中平添文件总是提示Failed to push the item(s)Failed to push XXXXX.txt on emulato...
- 股市风暴下的雪球架构改造经验分享
- 天大2021年秋学期考试《西方经济学》离线作业考核试题
热门文章
- 娓娓道来!那些BERT模型压缩方法(一)
- python中split拆分数组_Python 数组分割
- 栈的应用--中缀表达式转后缀表达式
- 关于联合体输出的问题(是否小端模式)
- 列表的下标;查找,判断,增加,删除函数
- 吴恩达机器学习练习3:Logistic regression(Multi-class Classification)
- 《人月神话》读后感1
- Java007-面向对象(多态)
- Rainbond 5.0正式发布, 支持对接管理已有Kubernetes集群...
- dismiss ios pop效果_iOS实现自定义炫酷的弹出视图(popView)