QStringListModel 绑定到QListView

1.QStringListModel 绑定到listView,从而实现MV模型视图
2.通过QStringListModel的新增、删除、插入、上下移动,listView来展示出来
3.下移动一行,传入curRow+2 的个人理解

布局

.h声明 

private:QStringList m_strList;QStringListModel *m_model;

.cpp 

#include "listmodelviewexample.h"
#include "ui_listmodelviewexample.h"ListModelViewExample::ListModelViewExample(QWidget *parent): QMainWindow(parent), ui(new Ui::ListModelViewExample)
{ui->setupUi(this);m_strList<<"北京"<<"上海"<<"广州"<<"深圳"<<"天津"<<"成都"<<"山东"<<"河南"<<"河北";m_model= new QStringListModel(this);m_model->setStringList(m_strList);ui->listView->setModel(m_model);ui->chkEditable->setChecked(true);ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);
}ListModelViewExample::~ListModelViewExample()
{delete ui;
}void ListModelViewExample::on_btnIniList_clicked()
{m_model->setStringList(m_strList);//重新载入
}void ListModelViewExample::on_btnListClear_clicked()
{m_model->removeRows(0,m_model->rowCount());
}void ListModelViewExample::on_chkEditable_clicked(bool checked)
{if(checked)ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);elseui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}void ListModelViewExample::on_btnListAppend_clicked()
{m_model->insertRow(m_model->rowCount());QModelIndex index= m_model->index(m_model->rowCount()-1,0);m_model->setData(index,"new Item",Qt::DisplayRole);ui->listView->setCurrentIndex(index);
}void ListModelViewExample::on_btnListInsert_clicked()
{QModelIndex index= ui->listView->currentIndex();m_model->insertRow(index.row());m_model->setData(index,Qt::AlignRight,Qt::TextAlignmentRole);ui->listView->setCurrentIndex(index);
}void ListModelViewExample::on_btnListDelete_clicked()
{QModelIndex index= ui->listView->currentIndex();m_model->removeRow(index.row());
}void ListModelViewExample::on_btnListMoveUp_clicked()
{int curRow = ui->listView->currentIndex().row();QModelIndex index = QModelIndex();/*moveRow这个方法,为什么要-1? 我理解如下,1. 在目标位置curRow-1插入一行 插入的新行的行号为curRow-22. 复制原curRow行到目标位置curRow-23. 删除原curRow行*/m_model->moveRow(index,curRow,index,curRow-1);
}void ListModelViewExample::on_btnListMoveDown_clicked()
{int curRow = ui->listView->currentIndex().row();QModelIndex index = QModelIndex();/*moveRow这个方法,为什么要+2? 我理解如下,1. 在目标位置curRow+2插入一行2. 复制curRow行到目标位置curRow+13. 删除curRow行*/m_model->moveRow(index,curRow,index,curRow+2);
}void ListModelViewExample::on_btnClearText_clicked()
{ui->plainTextEdit->clear();
}void ListModelViewExample::on_btnListImport_clicked()
{QStringList tmpList = m_model->stringList();for(int i=0;i<tmpList.size();i++){ui->plainTextEdit->appendPlainText(tmpList.at(i));}
}void ListModelViewExample::on_btnListSort_clicked(bool checked)
{if(checked)m_model->sort(0,Qt::AscendingOrder);elsem_model->sort(0,Qt::DescendingOrder);
}void ListModelViewExample::on_listView_clicked(const QModelIndex &index)
{QString str1 = QString::asprintf("模型索引行号:row=%d,column=%d;\t",index.row(),index.column());QVariant var = m_model->data(index,Qt::DisplayRole);QString str2 = var.toString();int curRow = ui->listView->currentIndex().row();QString str3 = QString::asprintf(";\tlistView:row=%d",curRow);ui->statusbar->showMessage(str1+ str2+ str3);}

 QStringListModel->moveRow  上移传入curRow-1  下移传入curRow+2  这是为什么?有些别扭

 

inline bool QAbstractItemModel::moveRow(const QModelIndex &sourceParent, int sourceRow,const QModelIndex &destinationParent, int destinationChild)

以下仅为个人理解。

destinationChild:创建了一个新行,该新行需要插入的位置,插入新行后,原行删除。

如下移一行,就需要在curRow+2的前面插入一行,插入的新行的行号为curRow+2,删除原行后变成curRow+1

再如上移一行,需要在curRow-1的前面插入一行,插入的新行号变成了curRow-1,而原curRow-1变成了curRow行号

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

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

相关文章

Matlab|基于改进鲸鱼优化算法的微网系统能量优化管理matlab-源码

目录 一、主要内容 二、部分代码 三、运行结果 四、下载链接 一、主要内容 该程序为《基于改进鲸鱼优化算法的微网系统能量优化管理》源码&#xff0c;主要内容如下&#xff1a; 针对包含多种可再生能源的冷热电联供型微网系统的能量优化问题&#xff0c;为了优化其运行过程…

中级职称如何查询真假呢?

关于中级职称如何查询真假&#xff0c;大家都会有疑问&#xff0c;办到职称的人员肯定是想查一查手里的证书&#xff0c;那么没有证书的人员也想了解一下&#xff0c;今天甘建二告诉大家几个通俗的职称查询方式&#xff1a; 1.电话查询&#xff08;以前办理职称是这种查询方式…

20W+喜爱的Pathview网页版 | 整合表达谱数据KEGG通路可视化

Pathview网站简介 网址&#xff1a;https://pathview.uncc.edu/ 前段时间介绍了一个R包 — Pathview。它可以整合表达谱数据并可视化KEGG通路&#xff0c;操作是先自动下载KEGG官网上的通路图&#xff0c;然后整合输入数据对通路图进行再次渲染。从而对KEGG通路图进行一定程度…

RedHat9 | kickstart无人值守批量安装

一、知识补充 kickstart Kickstart是一种用于Linux系统安装的自动化工具&#xff0c;它通过一个名为ks.cfg的配置文件来定义Linux安装过程中的各种参数和设置。 kickstart的工作原理 Kickstart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数&#xff0c;…

漏洞分析 | PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)

漏洞概述 PHP CGI&#xff08;Common Gateway Interface&#xff09;是在Windows平台上运行PHP的一种方式。CGI是一种标准接口&#xff0c;允许Web服务器与外部应用程序&#xff08;如PHP脚本&#xff09;进行交互&#xff0c;从而生成动态网页内容。 近期&#xff0c;PHP发布…

Logstash安装插件失败的问题

Logstash安装插件失败的问题 安装 logstash-output-jdbc 失败 报错为&#xff1a; Unable to download data from https://rubygems.org - Net::OpenTimeout: Failed to open TCP connection to rubygems.org:443 (execution expired) (https://rubygems.org/latest_specs.4.…

【算法 - 哈希表】两数之和

这里写自定义目录标题 两数之和题目解析思路解法一 &#xff1a;暴力枚举 依次遍历解法二 &#xff1a;使用哈希表来做优化 核心逻辑为什么之前的暴力枚举策略不太好用了&#xff1f;所以&#xff0c;这就是 这道题选择 固定一个数&#xff0c;再与其前面的数逐一对比完后&…

Linux系统(CentOS)安装iptables防火墙

1&#xff0c;先检查是否安装了iptables 检查安装文件-执行命令&#xff1a;rpm -qa|grep iptables 检查安装文件-执行命令&#xff1a;service iptables status 2&#xff0c;如果安装了就卸装(iptables-1.4.21-35.el7.x86_64 是上面命令查出来的版本) 执行命令&#xff1a…

蓝牙信标和蓝牙标签我们如何区分,区分方法有哪些?

蓝牙信标和蓝牙标签其实是两种不同的技术&#xff0c;很多人可能会把蓝牙信标和蓝牙标签搞混&#xff0c;因为区分不开来&#xff0c;但实际上&#xff0c;区分这两种技术也很简单&#xff0c;因为它们各自都有不一样的特性&#xff0c;通过这些特性&#xff0c;我们也能正常区…

相机光学(二十四)——CRA角度

CRA角度 0.参考资料1.什么是CRA角度2.为什么 CRA 会导致luma shading3.为什么 CRA 会导致color shading4.CRA相差过大的具体表现5.CRA Matching6.怎样选择sensor的CRA 0.参考资料 1.芯片CRA角度与镜头的匹配关系&#xff08;一&#xff09;   2.芯片CRA角度与镜头选型的匹配关…

爬虫进阶:Selenium与Ajax的无缝集成

爬虫与Ajax的挑战 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分内容。这为用户带来了更好的体验&#xff0c;但同时也使得爬虫在抓取数据时面临以下挑战&#xff1a; 动态内容加载&#xff…

vue中数组出现__ob__: Observer属性,导致不能正确使用问题解决

直接上图&#xff0c;如下图&#xff0c;数组中出现__ob__: Observer属性&#xff0c;导致无法取值。 解决方案为&#xff1a;JSON.parse(JSON.stringify(数组变量名))深拷贝数组&#xff0c;重新生成一个可枚举数组。 // 处理代码如let tempIds JSON.parse(JSON.stringify(i…

一文带你初探FreeRTOS信号量

本文记录我初步学习FreeRTOS的信号量的知识&#xff0c;在此记录分享&#xff0c;希望我的分享对你有所帮助&#xff01; 什么是信号量 在FreeRTOS中&#xff0c;信号量&#xff08;Semaphore&#xff09;是一种用于任务间同步和资源共享的机制。信号量主要用于管理对共享资源的…

Cgi上传文件 注意事项

//核心代码 ofstream outfile("/opt/software/" file.getFilename(), ios::out | ios::binary); outfile << file.getData(); //错误方式&#xff1a;outfile << file.getData() <<endl; outfile.close(); 参考博客&#xff1a; https://blog.cs…

HTML如何在图片上添加文字

HTML如何在图片上添加文字 当我们开发一个页面&#xff0c;插入图片时&#xff0c;需要有一组文字对图片进行描述。那么HTML中如何在图片上添加文字呢&#xff1f;这篇文章告诉你。 先让我们来看下效果图&#xff1a; 句子“这是一张夜空图片”被放置在了图片的左下角。 那么…

Leetcode.342 4的幂

给定一个整数&#xff0c;写一个函数来判断它是否是 4 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 整数 n 是 4 的幂次方需满足&#xff1a;存在整数 x 使得 n 4x 示例 1&#xff1a; 输入&#xff1a;n 16 输出&#xff1a;true示…

微信小程序的智慧物流平台-计算机毕业设计源码49796

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3研究方法 1.4开发技术 1.4.1 微信开发者工具 1.4.2 Node.JS框架 1.4.3 MySQL数据库 1.5论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 用户登录流程 2.2.2 数据删除流程 2.3 系统功能分…

ESP32CAM物联网教学09

ESP32CAM物联网教学09 摄像头配上显示屏 小智给摄像头配上了一块液晶显示屏,ESP32Cam变得更加酷炫了,应用也更加广泛了。 TFT彩色显示屏从第一课的CameraWebServer开始,我们一直都是利用浏览器来查看显示摄像头的视频流,都需要借助这个网页提供的服务。 可以让ESP32Cam开…

【案例干货】智能导览智慧景区系统小程序开发主要功能

智能景区/园区导览系统是一种利用云计算、物联网等新技术&#xff0c;通过互联网或移动互联网&#xff0c;借助便携的终端上网设备&#xff0c;为游客提供全方位、便捷化街区导航与信息服务的系统。 其主要功能可以归纳为以下几个方面&#xff1a; 1. 街区资讯展示 信息介绍&…

短链接学习day2

用户敏感信息脱敏展示&#xff1a; RequestParam 和 PathVariable的区别 注解是用于从request中接收请求的&#xff0c;两个都可以接收参数&#xff0c;关键点不同的是RequestParam 是从request里面拿取值&#xff0c;而 PathVariable 是从一个URI模板里面来填充。 PathVari…