Qt 中view类控件的目的是实现数据和模型分离,控件展示数据,数据保存在数据存储中,数据存储中的数据改变了,则控件中展示的数据跟随改变.当设计时只指定了一个控件和一个数据存储关联时,这种分离虽然也能体现,但感觉没有那么明显,但如果使用两个View控件和同一个数据存储关联时,这种分离就能更好地理解. 下面是一个案例: 案例界面如图: 该案例在左边窗口下面的按钮操作增加和删除时,右边窗口同时改变. 实现的关键代码有如下: 1.初始化时两个窗口绑定同一个数据存储,如下: def __init__(s…
相对于UILabell所支持的较短文本内容,UITextView对于长文本的支持更好.UITextView能够以滚动的方式全部浏览到长文本,并且就像UILabel那样,从ISO6,他也提供了对NSAttributeString的支持. 1.不可编辑的文本视图控件 在类文件中声明一个UITextView的IBOutlet对象 @property (nonatomic, retain) IBOutlet UITextView *textView; textView的代码配置示例如下: //背景颜色…
对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获.setData方法是视图中各种角色数据发生更新后视图用于更新Model数据的方法,只要重写该方法就可以截获视图对Model数据的修改. 不过网上介绍的思路都是从QAbstractTableModel派生出一个自己的Model类,并实现相关方法,比较复杂.老猿还需要仔细研究这种方法的详细方式及优缺点,相关文章大部分都是基于Qt实现的,懂C…
我们知道多个视图之间通过使用相同的model就可以实现数据的共享(具体请参考< PyQt学习随笔:ListView控件的视图和数据模型分离案例>),除了数据的共享之外,多个视图之间还可以同步选择项,需要同步选择项的视图首先必须是数据共享的,然后再设置相互之间有相同的选择Model,即选择项的数据存储,则这些同步视图中的一个的数据项选择发生变化会同时引起选择项同步设置了的视图的选择项发生同样的变更. 如果要实现ViewA与ViewB的视图同步,只需要执行如下语句: ViewA.setSelect…
根据<PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法>可以重写从PyQt的Model类继承的setData方法来实时截获View中对数据的更改,但需要注意,setData方法调用不光发生在View中实际存储的内部数据修改,也可能是其他与数据相关的属性或值调整,如数据项的checked变化,数据的对齐风格变化等. 因此如果应用需要响应数据的变化实时做出反应而重写setData时,需要判断setData的数据变化的角色,具体来说就是setData方法的参数role…
今天学习了ListView控件和页面跳转,下面大致介绍下: 第一步:创建显示内容的文件vlist.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" andro…
在QtDesigner中设计的界面中添加ListView控件后,是没办法添加需要在ListView控件中显示的列表项.由于ListView控件只是一个展示列表项的视图控件,实现了界面与数据的分离,其要展示的数据是单独存储在对应类型如QStringListModel的列表中,因此对控件数据的初始化需要先为控件绑定对应的数据对象.下面是一个ListView控件初始化的代码: self.itemmodel=QStringListModel(self) self.itemmodel.setStringL…
ListView控件可以通过控件对应数据存储删除列表项,具体使用: 数据存储.removeRow(元素索引位置) 删除指定位置的一个列表项. 数据存储如果不知道程序定义的数据存储名,可以通过model()函数获取对应ListView控件的数据存储. 案例:删除当前选择列表项的两种方式(m_ListView为listView控件名) 案例1:已知数据存储名为当前对象的itemmodel变量的实现代码 def DelListItem(self): selected = self.m_ListView…
通过currentIndex()可以获取listView控件的当前选择元素,如果选择了多个,则可以通过selectedIndexes()来获取选择的元素,不过这两个函数返回的是元素数据,而不是索引编号,如果要取到索引顺序号,需要通过row()函数. 案例(m_ListView为listView控件名,displaySelected为一个TextBrowser控件名,itemmodel为列表项的数据存储名): def DisplayItem(self): selected = self.m_Lis…
ListView控件如果需要增加列表项,就是在对应数据存储中插入项,这又分两种情况,一种是已知列表数据存储,一种是未知数据存储.如果是未知数据存储,可以通过: ListView控件名.model() 语句获取数据存储.在知道数据存储后,就可以对数据存储进行进行插入操作,简单语句如下: 数据存储.insertRow(插入位置索引) index =数据存储.index(插入位置索引,0) 数据存储.setData(index,插入项字符串,Qt.DisplayRole) 以上三个语句,第一个语句是在…