Qt基础教程之QStringListModel用法详解_第1页
Qt基础教程之QStringListModel用法详解_第2页
Qt基础教程之QStringListModel用法详解_第3页
Qt基础教程之QStringListModel用法详解_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 QListVia的健QStringListModel用于处理字符串列表的数据模型,它可以作为QListView的数据模型,在界面上显示和编辑字符串列表。QStringListModel 的setStringList()函数可以初始化数据模型的字符用列表的内容,stringList()函数返回数据模型内的字符串列表,在关联的ListView 组件里编辑修改数据后,数据都会及时更新到数据模型内的字符串列 表里。QStringListModel提供编辑和修改字符串列表数据的函数,如 insertRows()、removeRows()、setData() 等,这些操作直接影响数据模型内 部的字符串列

2、表,并且修改后的数据会自动在关联的 ListView 组件里刷新显 示。实例中采用QStringListModel 作为数据模型,QListView组件作为视图 组件,演示了 QStringListModel 和 QListView 构成 Model/View 结构编辑字 符串列表的功能,程序运行时界面如图 1所示。- XQFlalrjTeKtEclt宿空文本显示数据噢型的占比1甘扎1式北京,海i nser ted te®i天津河北山亲匹川重庆广布河南图1实例的运行时界面窗口左侧是对 QStringListModel的一些操作,右侧的 QPlaintextEdit组件显示 QStri

3、ng ListModel:stringList()的内容,以查看其是否与界面上ListView 组件显示的内容一致。QStringListModel 的用法Model/View结构对象和组件初始化实例中的窗口是从 QWidget继承而来的类 Widget ,界面采用可视化设计 在Widget类中定义一个QStringListModel 类的变量:QStringListModel *theModel;在Widget类的构造函数中进行变量的创建,完成数据模型与界面视图组 件的关联,下面是Widget类构造函数的代码:Widget 二Widget(QWidget *parent):QWidget(p

4、arent),ui(new Ui:Widget) ui->setupUi(this);QStringList theStrList; 保存初始 StringListtheStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"四川"<<"重庆"<<"广东"<<"河 南"初始化 St

5、ringListtheModel=new QStringListModel(this); / 创建数据模型theModel->setStringList(theStrList); 为模型设置 StringList ,会导入 StringList 的内容ui->listView->setModel(theModel); / 为 listView 设置数据模型 ui->listView->setEditTriggers(QAbstractItemView:DoubleClicked | QAbstractItemView:SelectedClicked);QStrin

6、gListModel 的setStringList() 函数将一个字符串列表的内容作 为数据模型的初始数据内容。QListView的setModel()函数为界面视图组件设 置一个数据模型。程序运行后,界面上ListView 组件里就会显示初始化的字符串列表的内容。编辑、添加、删除项的操作1)编辑项QListView:setEditTriggers() 函数设置 QListView 的条目是否可以编辑, 以及如何进入编辑状态,函数的参数是 QAbstractItemView:EditTrigger 枚 举类型值的组合。构造函数中设置为:ui->listView->setEditTr

7、iggers(QAbstractItemView二DoubleClicked |QAbstractItemView二SelectedClicked);表示在双击,或选择并单击列表项后,就进入编辑状态。 若要设置为不可编辑,则可以设置为:ui->listView->setEditTriggers(QAbstractItemView二 NoEditTriggers);2)添加项添加项是要在列表的最后添加一行,界面上“添加项”按钮的槽函数代码如下:void Widget:on_btnListAppend_clicked() 添加一行theModel->insertRow(theMo

8、del->rowCount(); / 在尾部插入一空行 /QModelIndex index;QModelIndex index=theModel->index(theModel->rowCount()-1,0);获取最后一行theModel->setData(index,"new item",Qt:DisplayRole);/ 设置显示文字 ui->listView->setCurrentIndex(index); 设置当前选中的行对数据的操作都是针对数据模型的,所以,插入一行使用的是QStringListModel 的 insertR

9、ow (int row) 函数,其中 row 是一个行号,表 示在row行之前插入一行。要在列表的最后插入一行,参数 row设置为列表 当前的行数即可。这样只是在列表尾部添加一个空行,没有任何文字。为了给 添加的项设置一个缺省的文字标题,首先要获得新增项的模型索引,即:QModellndex index=theModel->index (theModel->rowCount () -1,0);QStringListModel 的index()函数根据传递的行号、列号、父项的模型索引生成一个模型索引,这行代码为新增的最后一个项生成一个模型索引 index。为新增的项设置一个文字标题“

10、 new item ",使用setData() 函数, 并用到前面生成的模型索引index 。代码如下:theModel->setData(index, "new 让em",Qt二DisplayRole);在使用setData()函数时,必须指定设置数据的角色,这里的角色是Qt:DisplayRole ,它是用于显示的角色,即项的文字标题。3)插入项“插入项”按钮的功能是在列表的当前行前面插入一行,其实现代码如下:void Widget:on_btnListInsert_clicked()/插入一行QModelIndex index;index=ui->

11、;listView->currentIndex(); / 当前 modelIndextheModel->insertRow(index.row(); / 在当前行的前面插入一行theModel->setData(index,"inserted item",Qt:DisplayRole); / 设置显示文字theModel->setData(index,Qt:AlignRight,Qt:TextAlignmentRole); /设置对齐方式,不起作ui->listView->setCurrentIndex(index); 设置当前选中的行

12、QListView二currentIndex()犹得当刖项的模型索引 index , index.row()则返回这个模型索引的行号。4)删除当前项使用QStringListModel 的removeRow()函数删除某一行的代码如下:void Widget:on_btnListDelete_clicked()删除当前行一一QModelIndex index;index=ui->listView->currentIndex(); / 获取当前 modelIndextheModel->removeRow(index.row(); / 删除当前行5)删除列表删除列表的所有项可使用

13、QStringListModel 的 removeRows(int row, intcount)函数,它表示从行号row开始删除count行。代码如下:void Widget:on_btnListClear_clicked()/消除ListView的所有项theModel->removeRows(0,theModel->rowCount(); 以文本显示数据模型的内容以上在对界面上ListView 的项进行编辑时,实际操作的都是其关联的数 据模型theModel ,在对数据模型进行插入、添加、删除项操作后,内容立即在 ListView 上显示出来,这是数据模型与视图组件之间信号与槽

14、的作用,当数据 模型的内容发生改变时,通知视图组件更新显示。同样的,当在ListView 上双击一行进入编辑状态,修改一个项的文字内 容后,这部分内容也保存到数据模型里了。那么,数据模型内部应该保存有最 新的数据内容,对于 QStringListModel模型来说,通过stringList() 函数可以得到其最新的数据副本。界面上的“显示数据模型的StringList ”按钮获取数据模型的stringList ,并用多行文本的形式显示其内容,以检验对数据模 型修改数据,特别是在界面上修改列表项的文字后,其内部的数据是否同步更 新了。以下是界面上的“显示数据模型的StringList ”按钮的c

15、licked。 信号的槽函数代码,它通过数据模型的 stringList()函数获取字符串列表,并在plainTextEdit里逐行显示:void Widget二on_btnTextImport_clicked()/显示数据模型的 StringListQStringList tmpList;tmpList=theModel->stringList();/ 获取数据模型的StringListui->plainTextEdit->clear(); / 文本框清空for (int i=0; i<tmpList.count();i+)ui->plainTextEdit-&

16、gt;appendPlainText(tmpList.at(i);/ 显示数据模型的 StringList()返回的内)程序运行时,无论对ListView的列表做了什么编辑和修改,单击“显示数据模型的StringList ”按钮,在文本框里显示的文字内容与ListV ew 里总是完全相同的,说明数据模型的数据与界面上显示的内容是同步的。其他功能QListView 的clicked。信号会传递一个 QModellndex 类型的参数,禾用该参数,可以显示当前项的模型索引的行和列的信息,实现代码如下:void Widget二on_listView_clicked(const QModelIndex &index)显示QModelIndex的行、列号ui->LabInfo->setText(QString:asprintf(" 当前项:row=%d, column=%d", index.row(), index.column();在这个实例中,通过QStringListModel 和QListView说明了数据模型与视图组件之间构成Model/View结构的基

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论