模型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.hqwc.cn/news/414438.html

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

相关文章

基于android的违章处理APP 前后端服务 -毕业设计

基于android的违章处理APP 该项目是基于android版本的违章处理APP&#xff0c;系统包含前端android服务和后端web服务&#xff0c;内容和技术都是目前比较流行的架构。 技术介绍 前端android端&#xff1a; jdk17 gradle8.0 android studio 采用2023版本 后端web端&#xff…

基于局部信息提取的人脸标志检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 人脸检测 4.2 局部区域选择 4.3 特征提取 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .........................................…

情人节专属--HTML制作情人节告白爱心

💕效果展示 💕html展示 <!DOCTYPE html> <html lang="en" > <head>

如何在扫描电子显微镜中选择合适的扫描速度

在扫描电子显微镜&#xff08;SEM&#xff09;中&#xff0c;选择合适的扫描速度对于获得高质量的图像至关重要。扫描速度直接影响图像的分辨率、细节和清晰度。本文将泽攸小编将详细介绍在选择扫描速度时需要考虑的各种因素&#xff0c;并提供一些建议&#xff0c;以帮助您在S…

FPGA引脚选择(Select IO)--认知1

主要考虑功能角度&#xff08;速度&#xff0c;电平匹配&#xff0c;内部程序编写&#xff09;去找研究芯片内部资源 1. 关键字 HP I/O Banks, High performance The HP I/O banks are deisgned to meet the performance requirements of high-speed memory and other chip-to-…

2018年认证杯SPSSPRO杯数学建模C题(第二阶段)机械零件加工过程中的位置识别全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 基于轮廓提取与图像配准的零件定位问题研究 C题 机械零件加工过程中的位置识别 原题再现&#xff1a; 在工业制造自动生产线中&#xff0c;在装夹、包装等工序中需要根据图像处理利用计算机自动智能识别零件位置&#xff0c;并由机械手将零件…

数据结构之栈的基本操作

该顺序栈涉及到了存储整型数据的顺序栈还有存储字符型数据的顺序栈 实现的功能有&#xff1a;入栈、出栈、判断是否为空栈、求栈的长度、清空栈、销毁栈、得到栈顶元素 此外根据上述功能&#xff0c;编写了数值转换&#xff08;十进制转化八进制&#xff09;方法、括号匹配方法…

故事机手机平板等智能硬件DVT阶段可靠性测试方法

DVT是什么 DVT是设计样品验证测试评审阶段&#xff0c;这个阶段要进行全面的&#xff0c;客观的测试&#xff0c; 主要测试项目包括&#xff1a;功能测试&#xff0c;安规测试&#xff0c;性能测试&#xff0c;合规测试&#xff08;兼容性&#xff09;&#xff0c;机械测试&am…

【信号与系统】【北京航空航天大学】实验四、幅频、相频响应和傅里叶变换

一、实验目的 1、 掌握利用MATLAB计算系统幅频、相频响应的方法&#xff1b; 2、 掌握使用MATLAB进行傅里叶变换的方法&#xff1b; 3、 掌握使用MATLAB验证傅里叶变换的性质的方法。 二、实验内容 1、 MATLAB代码&#xff1a; >> clear all; >> a [1 3 2]; …

【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程

【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程 1&#xff09;系统架构1.1.系统成员组成1.2.作业提交流程 2&#xff09;核心概念2.1. 并行度&#xff08;Parallelism&#xff09;2.1.1.并行子任务和并行度2.1.2.并…

为什么要选择“零代码”开发的智慧能源管理平台?

全球低代码市场发展较早&#xff0c;集中度逐渐凸显&#xff0c;零代码市场尙未形成市场格局&#xff0c;很多企业出现“业务部门不懂技术&#xff0c;技术部门不懂业务”的现象往往会制约软件的开发进度&#xff0c;如何快速搭建软件系统应用&#xff0c;助力业务增长与效率提…

navigateTo失效-跳转不了页面解决办法!uniapp\vue

改了一个小时多的错误&#xff0c;跳转页面无论怎么样都跳转不了&#xff0c;有2个问题&#xff1a; 注意&#xff1a;uniapp的报错可以在console里检查&#xff01; 1.pages.json文件没有配置路径&#xff0c; 在pages:[ ]里面加 &#xff08;根据自己的路径进行修改 {&qu…