模型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; //保存初始 StringList
    theStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"四川"<<"重庆"<<"广东"<<"河南"; //初始化 StringList

    theModel= 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; //保存初始 StringList
    theStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"四川"<<"重庆"<<"广东"<<"河南"; //初始化 StringList
    theModel->setStringList(theStrList);//将一个字符串列表的内容:作为数据模型的初始数据内容
}

//“清空文件”按钮的单击事件
void Widget::on_btnTextClear_clicked()
{ //清除plainTextEdit的文本
    ui->plainTextEdit->clear();
}


void Widget::on_btnTextImport_clicked()
{// 显示数据模型的StringList
    QStringList tmpList;
    tmpList= theModel->stringList();//获取数据模型的最新数据StringList

    ui->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(); //当前 modelIndex
    theModel->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(); //获取当前 modelIndex
    theModel->removeRow(index.row()); //删除当前行
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前后端分离,仓储模式的医院安全(不良)事件报告系统

医院安全&#xff08;不良&#xff09;事件报告系统源码&#xff0c;PHP语言开发 医院不良事件上报系统&#xff0c;按照不良事件的管理部门不同&#xff0c;分为护理不良事件、药品不良反应事件、医技不良事件、院内感染事件、输血不良反应事件、器械不良事件、信息不良事件、…

【EI会议征稿通知】第五届电子商务与互联网技术国际学术会议(ECIT 2024)

2023 4th International Conference on E-Commerce and Internet Technology 第五届电子商务与互联网技术国际学术会议(ECIT 2024) 电子商务是以信息网络技术为手段&#xff0c;以商品交换为中心的商业活动。在互联网开放的网络环境下&#xff0c;基于客户端/服务端应用方式&…

Go语言圣经总结——基础/复合数据类型

一、程序结构 1.1 命令行参数 os 包以跨平台的方式&#xff0c;提供了一些与操作系统交互的函数和变量。程序的命令行参数可从 os 包的 Args 变量获取&#xff1b;os 包外部使用 os.Args 访问该变量。 var s, sep string // 第一种循环 for i : 1; i < len(os.Args); i {…

移动端开发进阶之蓝牙通讯(四)

移动端开发进阶之蓝牙通讯(四) 在移动端开发实践中,可能会要求在不同的设备之间切换,从而提升用户体验; 或者为了提升设备的利用率,实现设备之间的连接和协同工作; 不得不通过多端连接,将多个设备连接在一起,实现设备之间的数据共享、远程控制等功能,根据具体的应用…

HANA:存储过程(Procedures) DBUG

作者 idan lian 如需转载备注出处 如果对你有帮助&#xff0c;请点赞收藏~~~ 1.场景 最近不是写了蛮多hana的存储过程吗&#xff0c;如果是简单的增删改查&#xff0c;如果结果错了&#xff0c;还是比较容易找到错误在哪的&#xff0c;但是逐渐假如循环啊&#xff0c;变量判…

Docker之nacos集群部署

前言 Nacos 是一个开源的注册中心和配置中心&#xff0c;用于实现微服务架构中的服务发现、服务治理和动态配置管理。在 Docker 中使用 Nacos&#xff0c;你可以通过拉取官方提供的 Docker 镜像并运行容器的方式来快速部署 一.Nacos镜像拉取及独立模式 镜像拉取命令详解&…

渗透测试(14)- HTTP协议解析

HTTP(HyperText Transfer Protocol)即 超文本传输协议 &#xff0c;是一种详细规定了浏览器和 服务器之间互相通信的规则&#xff0c;它是万维网交换信息的基础&#xff0c;它允许将 HTML( 超文本标 记语言 ) 文档从 Web 服务器传送到Web 浏览器&#xff0c;用于客户端和服务器…

目标检测--01

基本概念 什么是目标检测&#xff1f; ​ 目标检测&#xff08;Object Detection&#xff09;的任务是找出图像中所有感兴趣的目标&#xff08;物体&#xff09;&#xff0c;确定它们的类别和位置&#xff0c;是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状…

【openwrt】【overlayfs】Openwrt系统overlayfs挂载流程

overlayfs是一种叠加文件系统&#xff0c;在openwrt和安卓系统中都有很广泛的应用&#xff0c;overlayfs通常用于将只读根文件系统(rootfs)和可写文件系统(jffs2)进行叠加后形成一个新的文件系统&#xff0c;这个新的文件系统“看起来”是可读写的&#xff0c;这种做法的好处是…

软件设计师6--流水线技术

软件设计师6--流水线技术 考点1&#xff1a;流水线--概念考点2&#xff1a;流水线--流水线计算考点3&#xff1a;流水线--流水线吞吐率计算例题&#xff1a; 考点1&#xff1a;流水线–概念 相关参数计算&#xff1a; 流水线执行时间计算、流水线吞吐率、流水线加速比、流水线…

如何使用视频下载助手获取公众号视频链接

微信公众号视频链接如何提取呢&#xff1f;今天就来说视频下载助手提取微信公众号的视频链接! 1:公众号获取视频下载助手二维码&#xff0c;并长按添加 2:找到需要下载的公众号带有视频的文章并转发给视频下载助手 3:提取完成后用户可以在视频下载助手中点击返回提取好的视频并…

IO网络5.0

思维导图 使用select实现TCP客户端的并发 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <myhead.h>#define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.122.61" //服务器客户端//客户端TCP int ma…

解决Microsoft outlook新版本无法支持部分邮件模式问题

问题原因&#xff1a;Outlook16.60及以上 for Mac和Outlook微软商店新版均启用了新界面&#xff0c;暂时不支持POP、Exchange等电子邮件协议。Office里的Outlook客户端不受影响。 注意事项&#xff1a;千万不要使用360软件管家或者腾讯软件管家等卸载微软商店的Outlook应用&am…

Python学习之路——异常捕获

一、什么是异常 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”&#xff0c;也就是bug 二、异常的捕获方法 当我们的程序遇到bug&#xff0c;那么就下来有两种情况 ①整个程序因为一个…

cpp多线程(二)——对线程的控制和锁的概念

这篇文章是笔者学习cpp多线程操作的第二篇笔记&#xff0c;没有阅读过第一篇的读者可以移步此处&#xff1a; Cpp多线程&#xff08;一&#xff09;-CSDN博客 如果读者发现我的文章里有问题&#xff0c;欢迎交流哈&#xff01; 一、如何控制线程呢&#xff1f; c11在std:…

PBR材质背光面太暗优化

图形学中漫反射光照遵循兰伯特光照模型&#xff0c;它的公式如下 其中&#xff1a; &#xff1a;漫反射光颜色 &#xff1a;入射光颜色 &#xff1a;材质的漫反射系数 &#xff1a;法线方向 &#xff1a;光源方向 由于背光面的法线方向和光源方向的点积为负数&#xff0c;因此…

操作系统课程设计-Windows 线程的互斥和同步

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 步骤 3.2 关键代码 3.2.1 创建生产者和消费者进程 3.2.2 生产者和消费者进程 4 实验结果与分析 5 代码 前言 本实验为课设内容&#xff0c;博客内容为部分报告内容&#xff0c;仅为大家提供参考&#xff0c;请勿直接抄…

python PyQt5的学习

一、安装与配置 1、环境&#xff1a; python3.7 2、相关模块 pip install pyqt5 pyqt5-tools pyqt5designer 可以加个镜像 -i https://pypi.tuna.tsinghua.edu.cn/simple3、配置设计器 python的pyqt5提供了一个设计器&#xff0c;便于ui的设计 界面是这样的&#xff1a…

MySQL三大日志

1. redo log 1.1 特点 InnoDB存储引擎独有物理日志&#xff0c;记录在数据页上做的修改让MySQL拥有了崩溃恢复能力&#xff0c;保证事务的持久性 1.2 刷盘时机 事务提交时log buffer 空间使用大约一半时事务日志缓冲区满InnoDB 定期执行检查点Checkpoint后台刷新线程&#…

网工内推 | 运维工程师,最高10K*15薪,思科认证优先

01 乐歌股份 招聘岗位&#xff1a;服务器运维工程师 职责描述&#xff1a; 1、负责公司云上云下所有服务器的日常运维工作&#xff0c;包括应用部署、巡检、备份、日志、监控&#xff0c;故障处理&#xff0c;性能优化等&#xff0c;保障公司相关系统稳定运行。 2、为开发、测…