模型Model:字符串列表模型QStringListModel

一、QStringListModel
(1)功能:处理字符串列表的数据模型,可作为QListView的数据模型,在界面上显示和编辑字符串列表。

二、QStringListModel 类中的函数
1)、 QStringListModel(QObject *parent = Q_NULLPTR) //构造函数
QStringListModel(const QStringList &strings, QObject *parent = Q_NULLPTR)

2)、 void setStringList(const QStringList &strings)
把模型内部的字符串列表(即该模型存储数据的变量)设置为 strings,该模型将通知视
图,基础数据已更改。
3)、 QStringList stringList() const //返回存储数据的字符串列表(数据模型的最新数据)
以下函数为重新实现的 QAbstractItemModel 类中的相应函数(这些函数会使用到)。

4)、 virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
把索引 index 处指定角色 role 所关联的数据置为 value,若数据项被改变则发送
QAbstractItemModel::dataChanged()信号。
5)、 virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
返回索引index处指定角色role所关联的数据。若索引无效,则返回一个无效的QVariant。

6)、 virtual Qt::ItemFlags flags(const QModelIndex &index) const
返回索引 index 所指项目的标志,标志详见 QAbstractItemModel 类。

7)、 insertRow(row)
功能:在row行之前插入一行,要在列表最后插入一行,参数row设置为列表当前的行数即可。
参数:row代表行号
8)、 virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
9)、virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
以上函数表示从行 row 开始 插入或删除 count 行,参数 parent 是可选的,仅用于与
QAbstractItemModel 保持一致,默认为空索引,表示在模型的顶层插入行。

10)、removeRow(index.row())
(1)功能:删除当前项
(2)参数:index表示当前模型索引
removeRows(row,count)
(1)功能:从行号row开始删除count行
(2)参数:row代表行号;count表示删除行的数目

11)、index(row,column,parentItem)
(1)功能:获取第row行号、column列号、或父项parentItem的模型索引
(2)参数:行号、列号和父项


12)、 virtual int rowCount(const QModelIndex &parent = QModelIndex()) const
返回模型中的行数,该值对应于模型内部字符串列中的项目数量。因为该模型是列表,
所有 parent 应是一个无效索引,若 parent 是一个有效索引,则该函数将返回 0。
13)、 virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const
virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
virtual Qt::DropActions supportedDropActions() const
以上函数详见父类 QAbstractItemModel 对应函数

三、例子

#include "widget.h"
#include "ui_widget.h"#pragma execution_character_set("utf-8");Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QStringList  theStrList; //保存初始 StringListtheStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"四川"<<"重庆"<<"广东"<<"河南"; //初始化 StringListtheModel= new QStringListModel(this); //创建数据模型//将一个字符串列表的内容:作为数据模型的初始数据内容theModel->setStringList(theStrList); //为模型设置StringList,会导入StringList的内容ui->listView->setModel(theModel); //为listView设置数据模型//设置条目是否可编辑,以及如何进入编辑状态//这里表示:在“双击\选择并单击”列表项后,进入编辑状态;ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);
}Widget::~Widget()
{delete ui;
}void Widget::on_listView_clicked(const QModelIndex &index)
{ //显示QModelIndex的当前项:行、列号ui->LabInfo->setText(QString::asprintf("当前项:row=%d, column=%d",index.row(),index.column()));
}//“恢复列表”的单击事件 响应函数
void Widget::on_btnIniList_clicked()
{ //重新载入theStrList的内容,初始化theModel的内容QStringList    theStrList; //保存初始 StringListtheStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"四川"<<"重庆"<<"广东"<<"河南"; //初始化 StringListtheModel->setStringList(theStrList);//将一个字符串列表的内容:作为数据模型的初始数据内容
}//“清空文件”按钮的单击事件
void Widget::on_btnTextClear_clicked()
{ //清除plainTextEdit的文本ui->plainTextEdit->clear();
}void Widget::on_btnTextImport_clicked()
{// 显示数据模型的StringListQStringList tmpList;tmpList= theModel->stringList();//获取数据模型的最新数据StringListui->plainTextEdit->clear(); //文本框清空for (int i=0; i< tmpList.count();i++)ui->plainTextEdit->appendPlainText(tmpList.at(i)); //显示数据模型的StringList()返回的内容
}//清除列表 按钮
void Widget::on_btnListClear_clicked()
{//清除ListView的所有项theModel->removeRows(0, theModel->rowCount());
}//"添加项"按钮
void Widget::on_btnListAppend_clicked()
{ //添加一行theModel->insertRow(theModel->rowCount()); //在尾部插入一“空行”QModelIndex index=theModel->index(theModel->rowCount()-1, 0);//获取最后一行theModel->setData(index, "new item", Qt::DisplayRole);//设置显示文字ui->listView->setCurrentIndex(index); //设置最后一行为 当前选中的行
}//“插入选”按钮
void Widget::on_btnListInsert_clicked()
{//插入一行QModelIndex  index;index=ui->listView->currentIndex(); //当前 modelIndextheModel->insertRow(index.row()); //在当前行的前面插入一行theModel->setData(index,"inserted item",Qt::DisplayRole); //设置显示文字theModel->setData(index,Qt::AlignRight,Qt::TextAlignmentRole); //设置对齐方式,不起作用ui->listView->setCurrentIndex(index); //设置当前选中的行
}
//"删除当前项"按钮
void Widget::on_btnListDelete_clicked()
{//删除当前行QModelIndex  index;index=ui->listView->currentIndex(); //获取当前 modelIndextheModel->removeRow(index.row()); //删除当前行
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/633130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程监测仪器振弦采集仪的新技术研究与创新方面

工程监测仪器振弦采集仪的新技术研究与创新方面 工程监测仪器振弦采集仪是一种用于测量和监测工程结构振动特性的仪器。传统的振弦采集仪主要采用振弦传感器和数据采集设备&#xff0c;通过对结构振动信号的采集和分析&#xff0c;可以获得结构的动态特性&#xff0c;如固有频…

【01】mapbox js api加载arcgis切片服务

需求&#xff1a; 第三方的mapbox js api加载arcgis切片服务&#xff0c;同时叠加在天地图上&#xff0c;天地图坐标系web墨卡托。 效果图&#xff1a; 形如这种地址去加载http://zjq2022.gis.com:8080/demo/loadmapboxtdt.html 思路&#xff1a; 需要制作一个和天地图比例…

vscode配置web开发环境(WampServer)

这里直接去下载了集成的服务器组件wampserver&#xff0c;集成了php&#xff0c;MySQL&#xff0c;Apache 可能会出现安装问题&#xff0c;这里说只有图上这些VC包都安装了才能继续安装&#xff0c;进入报错里提供的链接 在页面内搜索相关信息 github上不去可以去镜像站 下载…

《Python数据分析技术栈》第01章 02 Jupyter入门(Getting started with Jupyter notebooks)

02 Jupyter入门&#xff08;Getting started with Jupyter notebooks&#xff09; 《Python数据分析技术栈》第01章 02 Jupyter入门&#xff08;Getting started with Jupyter notebooks&#xff09; Before we discuss the essentials of Jupyter notebooks, let us discuss…

C#,字符串匹配(模式搜索)RK(Rabin Karp)算法的源代码

M.O.Rabin Rabin-Karp算法&#xff0c;是由M.O.Rabin和R.A.Karp设计实现的一种基于移动散列值的字符串匹配算法。 通常基于散列值的字符串匹配方法&#xff1a;&#xff08;1&#xff09;首先计算模式字符串的散列函数&#xff1b;&#xff08;2&#xff09;然后利用相同的散…

【漏洞攻击之文件上传条件竞争】

漏洞攻击之文件上传条件竞争 wzsc_文件上传漏洞现象与分析思路编写攻击脚本和重放措施中国蚁剑拿flag wzsc_文件上传 漏洞现象与分析 只有一个upload前端标签元素&#xff0c;并且上传任意文件都会跳转到upload.php页面&#xff0c;判定是一个apache容器&#xff0c;开始扫描…

IntelliJ IDEA 中输出乱码解决

最近tomcat突然在控制台输出乱码&#xff0c;各种乱码问题&#xff0c;查阅大量的资料&#xff0c;最终得以解决. IDEA控制台输出乱码 问题一&#xff1a;idea中tomcat控制台输出乱码 运行本地的tomcat\bin\start.bat文件页面显示正常 在idea中显示乱码 解决&#xff1a; 根…

WebRTC视频会议/视频客服系统EasyRTC进入会议室密码验证的开发与实现

基于WebRTC技术的EasyRTC视频会议系统&#xff0c;建设目标是让用户随时随地、快捷方便地进行视频会议&#xff0c;并根据行业需求有针对性地提供多样化、个性化功能&#xff0c;该系统是覆盖全球的实时音视频开发平台&#xff0c;支持一对一、一对多等视频通话&#xff0c;极大…

梳理从MVP变换到光栅化的过程

1.梳理从MVP变换到光栅化的过程 相关博客&#xff1a; 1.MVP变换 2.Rasterization&#xff08;光栅化&#xff09; 1.1 View/Camera transformation 此例中相机初始位置为&#xff08;0,0,5&#xff09;【备注&#xff1a;详见主函数中输入的值】经过 M view M_{\text{view}}…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-贴子列表分页显示实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

使用 ClassFinal 对SpringBoot jar加密加固并进行机器绑定

写在前面&#xff1a;各位看到此博客的小伙伴&#xff0c;如有不对的地方请及时通过私信我或者评论此博客的方式指出&#xff0c;以免误人子弟。多谢&#xff01;如果我的博客对你有帮助&#xff0c;欢迎进行评论✏️✏️、点赞&#x1f44d;&#x1f44d;、收藏⭐️⭐️&#…

【正点原子STM32】初识STM32(芯片分类、资料下载、命名规则、选型)

一、STM32是什么 二、STM32芯片分类 三、STM32命名规则 四、STM32选型 五、总结 一、STM32是什么 STM32是STMicroelectronics&#xff08;意法半导体&#xff09;公司推出的一系列32位的嵌入式系统微控制器&#xff08;Microcontroller Unit&#xff0c;MCU&#xff09;产品。…

网络安全 | 苹果承认 GPU 安全漏洞存在,iPhone 12、M2 MacBook Air 等受影响

1 月 17 日消息&#xff0c;苹果公司确认了近期出现的有关 Apple GPU 存在安全漏洞的报告&#xff0c;并承认 iPhone 12 和 M2 MacBook Air 受影响。 该漏洞可能使攻击者窃取由芯片处理的数据&#xff0c;包括与 ChatGPT 的对话内容等隐私信息。 安全研究人员发现&#xff0c;…

策略模式在工作中的运用

前言 在不同的场景下&#xff0c;执行不同的业务逻辑&#xff0c;在日常工作中是很寻常的事情。比如&#xff0c;订阅系统。在收到阿里云的回调事件、与收到AWS的回调事件&#xff0c;无论是收到的参数&#xff0c;还是执行的逻辑都可能是不同的。为了避免&#xff0c;每次新增…

零售的数字化转型,利用AWS云服务资源如何操作?

国内市场趋于饱满&#xff0c;各行各业的发展接近瓶颈&#xff0c;就连零售行业都竞争激烈&#xff0c;随处可见的零售小店也预示着需要投入大量的人力&#xff0c;而且由于消费者的行为和预期已经发生了根本性变化&#xff0c;这迫使零售商不得不加速整个价值链的数字化转型&a…

Java中List接口两个实现,ArrayList类和LinkedList类的常用方法(一)

List接口 要了解List接口&#xff0c;就不得不说起Java的集合框架。 &#xff08;该图来自菜鸟教程&#xff09; Collection接口和Map接口 Java 集合框架主要包括两种类型的容器&#xff0c;集合Collection和图Map。 Collection接口代表了单列集合&#xff0c;它包含了一组…

1月下半笔记(个人向)

最近才开始看d2l&#xff08;这种东西早该在两年前看的&#xff0c;拖到现在了&#xff09; 为了做项目还得学一手OpenGL&#xff08;被windows安装GLFW逼疯了&#xff09; 1.15 打完ICPC EC final回来&#xff0c;也许可以出一篇博客写下简单的题解。 对蛋白质相似空间子结…

如何获取一个德国容器

1.注册discord账号 discord注册网址&#xff1a;https://discord.com/ 下面是容器的discord邀请链接 https://discord.com/Discord邀请链接&#xff1a;https://discord.com/invite/jVMSWrchC4 2.进入discord群聊点击link 在点击网址&#xff0c;这个网址每星期都会变就是图…

Docker容器添加映射端口

方式一 简单粗暴&#xff08;需要等一段时间&#xff09; 直接给现在容器停了&#xff08;当然你要不想停也可以&#xff0c;只是打包会慢一点&#xff0c;当然我是没出意外&#xff0c;如果你怕出现特殊情况&#xff0c;那就先把容器停了&#xff09;&#xff0c;然后把这个容…

C语言总结十三:程序环境和预处理详细总结

了解程序的运行环境可以让我们更加清楚的程序的底层运行的每一个步骤和过程&#xff0c;做到心中有数&#xff0c;预处理阶段是在预编译阶段完成&#xff0c;掌握常用的预处理命令语法&#xff0c;可以让我们正确的使用预处理命令&#xff0c;从而提高代码的开发能力和阅读别人…