Qt 中view类控件的目的是实现数据和模型分离,控件展示数据,数据保存在数据存储中,数据存储中的数据改变了,则控件中展示的数据跟随改变。当设计时只指定了一个控件和一个数据存储关联时,这种分离虽然也能体现,但感觉没有那么明显,但如果使用两个View控件和同一个数据存储关联时,这种分离就能更好地理解。

下面是一个案例:

案例界面如图:



该案例在左边窗口下面的按钮操作增加和删除时,右边窗口同时改变。

实现的关键代码有如下:

1、初始化时两个窗口绑定同一个数据存储,如下:

    def __init__(self):
super(appmain, self).__init__()
self.setupUi(self)
self.itemmodel=QStringListModel(self) #定义数据存储
self.itemmodel.setStringList(["item1","item2"]) #数据存储初始化
self.m_ListView.setModel(self.itemmodel) #第一个窗口绑定数据存储
self.m_listViewCopy.setModel(self.itemmodel) #第二个窗口绑定同样的数据存储

2、增加一项的槽函数代码

    def AddListitem(self):
count = self.itemmodel.rowCount() #取数据存储的记录数
selectindex = self.m_ListView.currentIndex() #取当前列表中选中的项的索引数据
if selectindex.isValid():Pos = selectindex.row()+1 #取索引数据在存储中的序号位置
else: Pos = count self.itemmodel.insertRow(Pos) #插入一项
index = self.itemmodel.index(Pos,0) #取新插入项的索引数据
stritem = f'item{Pos+1}' #需要显示的内容
self.itemmodel.setData(index,stritem,Qt.DisplayRole) #数据存储新插入项的数据赋值
self.m_ListView.setCurrentIndex(index)

3、删除一项的槽函数代码

    def DelListItem(self):
selected = self.m_ListView.selectedIndexes() #取当前选中的项
itemmodel = self.m_ListView.model() #取ListView控件的数据存储,这种方法是不知道数据存储实例变量时可以使用,实际上也可以直接用实例变量self.itemmodel
for i in selected:
itemmodel.removeRow(i.row()) #删除选中的项

使用PyCharm关联的项目完整代码老猿已上传资源到csdn,大家到老猿提供的ListView.rar资源文件中下载。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

请大家多多支持,点赞、评论和加关注!谢谢!**

最新文章

  1. ES5特性之Object.freeze
  2. 手机端开发icon的问题
  3. iOS 开发笔记
  4. centos6.5上安装Openfire 4.0.3
  5. WPF 显示gif
  6. Magento多语言功能
  7. 链表之求链表倒数第k个节点
  8. CodeForces 219C Color Stripe
  9. 列式存储 V.S. 行式存储
  10. Dragons
  11. Java eclipse生成doc文档
  12. 自定义的string类
  13. Disruptor的应用示例——大文件拆分
  14. eclipse从git拉去出现红色方块的解决办法
  15. PortableApps使用入门
  16. Java基础_Java概述
  17. Kaldi nnet3的fastlstm与标准LSTM
  18. jQuery子页面获取父页面元素并绑定事件
  19. python六十三课——高阶函数之sorted
  20. Codeforces Round #514 (Div. 2) D. Nature Reserve

热门文章

  1. TCP 三次握手和四次挥手图解(有限状态机)
  2. linux 协议栈 实现--编码小知识分析
  3. MySQL中EXPLAIN结果的参数详解
  4. TCP粘包问题的解决方案02——利用readline函数解决粘包问题
  5. VGA详解及色块碰撞示例
  6. java 关于 a==null 和 null==a, a.equals("123") 和“123”.equals(a)
  7. Django实战总结 - 快速开发一个数据库查询工具
  8. LeetCode 中等题解(4)
  9. Java基础—Java方法的调用
  10. pandas 对时间索引进行分割