C++ Qt开发:StringListModel字符串列表映射组件

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStringListModel字符串映射组件的常用方法及灵活运用。

QStringListModel 是 Qt 中用于处理字符串列表数据的模型类之一,它是 QAbstractListModel 的子类,用于在 Qt 的视图类(如 QListViewQComboBox 等)中显示字符串列表。该组件是用于在Qt中快速显示字符串列表的便捷模型类。该组件通常会配合ListView一起使用,例如将ListView组件与Model模型绑定,当ListView组件内有数据更新时,就可以利用映射将数据模型中的数值以字符串格式提取出来,同理也可实现将字符串赋值到指定的ListView组件内。

以下是对 QStringListModel 的概述:

  • 继承关系: QStringListModel 继承自 QAbstractListModel
  • 用途: QStringListModel 主要用于将字符串列表(QStringList)与视图进行绑定,使得这些字符串可以在视图中显示和管理。
  • 特点:
    • 可以通过 setStringList 方法设置字符串列表。
    • 提供了获取和设置数据的接口,可以通过模型索引访问和修改数据。
    • 适用于显示简单的字符串列表,不涉及复杂的数据结构。
  • 常见操作:
    • 设置字符串列表: 使用 setStringList 方法设置要在视图中显示的字符串列表。
    • 获取字符串列表: 使用 stringList 方法获取当前模型中的字符串列表。
    • 访问和修改数据: 可以使用模型索引通过 data 方法获取数据,通过 setData 方法修改数据。

以下是 QStringListModel 的一些常用方法,说明以及概述,按表格形式呈现:

方法描述
QStringListModel(QObject * parent = nullptr)构造函数,创建一个 QStringListModel 对象。
QStringListModel(const QStringList & strings, QObject * parent = nullptr)构造函数,创建一个包含指定字符串列表的 QStringListModel 对象。
QStringList stringList() const获取当前模型中的字符串列表。
void setStringList(const QStringList & strings)设置模型中的字符串列表。
Qt::ItemFlags flags(const QModelIndex & index) const返回指定索引处的项目标志。
QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const返回指定行、列和父索引的模型索引。
QModelIndex parent(const QModelIndex & child) const返回指定子索引的父索引。
int rowCount(const QModelIndex & parent = QModelIndex()) const返回给定父索引下的行数。
int columnCount(const QModelIndex & parent = QModelIndex()) const返回给定父索引下的列数。
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const返回给定索引处的角色为 role 的数据。
bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole)设置给定索引处的角色为 role 的数据为 value
bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex())在给定父索引下的 row 位置处插入 count 行。
bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex())从给定父索引下的 row 位置开始删除 count 行。

这些方法使 QStringListModel 可以方便地管理和操作字符串列表数据,并能够与 Qt 的视图组件集成,实现数据的显示和交互。

首先绘制UI界面,如下图中所示,左侧是一个ListView组件,右侧是一个PlainTextEdit组件;

1.1 初始化模型

如下代码演示了如何在 MainWindow 中使用 QStringListModelQListView 来展示一个字符串列表。

以下是该代码的一些说明:

  1. 在构造函数中,首先使用 QStringList theStringList 创建了一个字符串列表,并向其中添加了一些城市名称。
  2. 接着,创建了一个 QStringListModel 对象 model 并使用 setStringList 方法将先前创建的字符串列表导入模型中。
  3. 然后,通过 ui->listView->setModel(model) 将模型设置到 QListView 中,从而使模型中的数据在 QListView 中显示。
  4. 使用 setEditTriggers 方法设置了编辑触发器,使得可以通过双击或选择项目来触发编辑操作。

这样,通过 QStringListModelQListView 的结合使用,可以很方便地在界面上展示和管理字符串列表的数据。

#include <iostream>
#include <QStringList>
#include <QStringListModel>

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 初始化一个StringList字符串列表
    QStringList theStringList;
    theStringList << "北京" << "上海" << "广州" << "深圳" << "山东" << "四川";

    // 创建并使用数据模型
    model = new QStringListModel(this);

    // 导入模型数据
    model->setStringList(theStringList);

    // 为listView设置模型
    ui->listView->setModel(model);
    ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked |
                                  QAbstractItemView::SelectedClicked);
}

MainWindow::~MainWindow()
{
    delete ui;
}

运行后左侧的ListView组将将被初始化为城市地址,如下图所示;

1.2 添加与插入

如下代码演示了如何在 MainWindow 中通过按钮的点击事件向 QStringListModel 中添加或插入数据。

以下是代码的一些说明:

  1. on_btnListAppend_clicked 方法用于在 QStringListModel 的末尾添加一行。具体步骤包括:
    • 使用 insertRow 在模型的末尾插入一行。
    • 获取最后一行的索引。
    • 从界面的 lineEdit 获取输入的文本。
    • 使用 setData 方法将文本设置到模型的指定索引处。
    • 使用 setCurrentIndex 方法将最后一行设置为当前选中行。
    • 清空输入框。
  2. on_btnListInsert_clicked 方法用于在当前选中行的前面插入一行。具体步骤包括:
    • 获取当前选中行的索引。
    • 使用 insertRow 在当前行的前面插入一行。
    • 从界面的 lineEdit 获取输入的文本。
    • 使用 setData 方法将文本设置到模型的指定索引处。
    • 使用 setData 方法设置对齐方式为右对齐。
    • 使用 setCurrentIndex 方法将当前行设置为当前选中行。

这样,通过这两个按钮的点击事件,可以向 QStringListModel 中添加或插入数据,并在 QListView 中进行显示。

// 添加一行
void MainWindow::on_btnListAppend_clicked()
{
    model->insertRow(model->rowCount());                       // 在尾部插入一行
    QModelIndex index = model->index(model->rowCount()-1,0);   // 获取最后一行的索引
    QString LineText = ui->lineEdit->text();
    
    model->setData(index,LineText,Qt::DisplayRole);            // 设置显示文字
    ui->listView->setCurrentIndex(index);                      // 设置当前行选中
    ui->lineEdit->clear();
}

// 插入一行数据到ListView
void MainWindow::on_btnListInsert_clicked()
{
    QModelIndex index;

    index= ui->listView->currentIndex();             // 获取当前选中行
    model->insertRow(index.row());                   // 在当前行的前面插入一行
    
    QString LineText = ui->lineEdit->text();
    model->setData(index,LineText,Qt::DisplayRole);             // 设置显示文字
    model->setData(index,Qt::AlignRight,Qt::TextAlignmentRole); // 设置对其方式
    ui->listView->setCurrentIndex(index);                       // 设置当前选中行
}

运行后输出如下图,使用SetData则可以在index位置设置字符串,并最终setCurrentIndex设置到当前下标处;

1.3 转换字符串

如下代码演示了如何通过按钮的点击事件将 QStringListModel 的数据导入到 QPlainTextEdit 中。

以下是代码的一些说明:

  • 使用 stringList 方法获取数据模型的字符串列表。
  • 清空 QPlainTextEdit,准备追加数据。
  • 循环遍历字符串列表,并将每个字符串追加到 QPlainTextEdit 中,每个字符串之间用逗号隔开。

这样,通过这个按钮的点击事件,可以将 QStringListModel 中的数据导入到 QPlainTextEdit 中。

// 显示数据模型文本到QPlainTextEdit
void MainWindow::on_btnTextImport_clicked()
{
    QStringList pList;

    pList = model->stringList();    // 获取数据模型的StringList
    ui->plainTextEdit->clear();     // 先清空文本框

    // 循环追加数据
    for(int x=0;x< pList.count();x++)
    {
        ui->plainTextEdit->appendPlainText(pList.at(x) + QString(","));
    }
}

当点击显示数据模型时,则会将列表转换为字符串并按照特定格式输出到编辑框内,如下图所示;

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

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

相关文章

智慧工地一体化云平台APP源码:监管端、工地端、危大工程、智慧大屏、物联网、塔机、吊钩、升降机

智慧工地管理平台是依托物联网、互联网建立的大数据管理平台&#xff0c;是一种全新的管理模式&#xff0c;能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。 智慧工地源码技术说明 1.微服务架构JavaSpring Cloud UniApp MySql 2.支持多端展示&#xff08;PC端、手…

istio 认证:对等身份认证+服务请求认证

istio 中有两种不同的身份认证方式&#xff1a; 基于 mTLS 的对等身份认证 PeerAuthentication基于 JWT&#xff08;JSON Web Token&#xff09;令牌的服务请求认证 RequestAuthentication 对等身份认证 PeerAuthentication 概念 提供服务到服务的认证服务网格的主要场景就…

循环神经网络中的梯度消失或梯度爆炸问题产生原因分析

循环神经网络中&#xff0c;通过时间反向传播&#xff08;backpropagation through time&#xff0c;BPTT&#xff09;实际上是循环神经网络中反向传播技术的一个特定应用。 &#xff08;1&#xff09;它要求我们将循环神经网络的计算图以此展开一个时间步&#xff0c;以获得模…

Redis BitMap(位图)

这里是小咸鱼的技术窝&#xff08;CSDN板块&#xff09;&#xff0c;我又开卷了 之前经手的项目运行了10多年&#xff0c;基于重构&#xff0c;里面有要实现一些诸如签到的需求&#xff0c;以及日历图的展示&#xff0c;可以用将签到信息存到传统的关系型数据库&#xff08;MyS…

BBS项目--登录

BBS阶段性测试总要求 django登录报错 Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。 原因分析&#xff1a;出现这种情况在Windows中很常见&#xff0c;就是端口被占用 解决措施&#xff1a;这时我们只需改一下端口便可以了 登录前端页面(HTML…

网络技术基础与计算思维实验教程_3.2_无线局域网与以太网互连实验

实验内容 实验目的 实验原理 实验步骤 打开上一个实验的文件 切换到物理工作区 导航到城市家园 放置一台交换机 和两台台式机 直通线连接 把AP0链接到交换机的端口3上 切换回逻辑工作区 选择DHCP自动获取网络信息 PC1同样 然后 验证通信过程 laptop0和PC0 laptop1和PC1 验…

AcWing算法进阶课-1.1.2Dinic/ISAP求最大流

算法进阶课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 给定一个包含 n n n 个点 m m m 条边的有向图&#xff0c;并给定每条边的容量&#xff0c;边的容量非负。 图中可能存在重边和自环。求从点 S S S 到点 T T T 的最大流。 输入格式 第一行包…

CentOS6.10 卸载MySQL8.0.34升级至8.0.35

准备要更新的MySQL安装包,下载地址:MySQL :: Download MySQL Community Server 查看当前MySQL版本 备份数据库 mysqldump -uroot -p -B > /opt/backup/20231220_mysql.sql 检查备份文件 查看所有服务项: service --status-all 可以看到我们注册的MySQL服务是mysqld 停止…

2023年中国数据智能管理峰会(DAMS上海站2023)-核心PPT资料下载

一、峰会简介 数据已经成为企业的核心竞争力&#xff01;谁掌控数据、更好的利用数据、实现资产化&#xff0c;谁就会真正率先进入大数据时代。 1、数据智能管理趋势和挑战 在峰会上&#xff0c;与会者讨论了数据智能管理的最新趋势和挑战。随着数据量的不断增加&#xff0c…

FMCW雷达仿真:基于L形阵列4D点云获取

摘要&#xff1a;本期内容为3D点云目标获取的延续工作&#xff0c;在距离、速度、方位角估计的基础上&#xff0c;通过设计L型阵列结构&#xff0c;进一步实现目标俯仰角的估计&#xff0c;最终实现目标4-D点云的获取。首先&#xff0c;通过中频信号建立仿真信号模型&#xff0…

【Chrome】ERR_SSL_PROTOCOL_ERROR问题

文章目录 前言一、下载二、使用步骤总结 前言 Edge升级最新版后&#xff0c;有的https访问不了&#xff0c;报如下错误 发现新版Chrome以及Chromium内核访问nginx ssl时报错&#xff0c;顺着这个思路接着查看到大佬的结论&#xff1a;服务器nginx使用的openssl版本过低&#…

MyBatis关联查询(一、一对一查询)

MyBatis关联查询&#xff08;一、一对一查询&#xff09; 需求&#xff1a;查询账户信息&#xff0c;关联查询用户信息。 分析&#xff1a;因为一个账户信息只能供某个用户使用&#xff0c;所以从查询账户信息出发关联查询用户信息为一对一查询。 在第一个mybatis项目并读取数…

【网络编程】poll和epoll服务器的设计

文章目录 前言一、poll二、epoll 1.epoll初识2.epoll服务器的设计3.epoll的工作原理4.epoll的优点5.epoll的工作模式总结 前言 poll和select一样&#xff0c;也是一种linux中的多路转接的方案。而poll解决了select的两个问题&#xff1a; 1.select的文件描述符有上限的问题。…

[计网02] 数据链路层 笔记 总结 详解

目录 数据链路层概述 主要功能 封装成帧 透明传输 差错检测 冗余码 差错控制 检错编码 纠错编码 奇偶效验法 CRC循环冗余码 静态分配信道 频分多路复用FDM 时分多路复用TDM 波分多路复用WDM 码分多路复用CDM 随机访问介质的访问控制 ALOHA CSMA CSMA/CD CSMA/…

Weblogic Server工具WLST的使用

1.Weblogic脚本工具WLST介绍 可以用命令行来操作 Weblogic scripting tools 2.Weblogic WLST三种工作模式 2.1 wlst.sh tips:weblogic的T3 协议与HTTP/HTTPS 协议 操作如下&#xff1a;wlst在 common目录下 weblogic14c/wlserver/common/bin/ [weblogicfysedu32 weblogic]$…

【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口?!

【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口&#xff1f;&#xff01;&#x1f60e; 前言&#x1f64c;【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口&#xff1f;&#xff01;查看自己的配置文件&#xff1a;最终成功访问如图所示&#xff1a; 总结撒花…

C# SQLite基础工具类

目录 1、安装System.Data.SQLite工具包 2、创建数据库 3、数据库的连接与断开 4、执行一条SQL语句 5、批量执行sql语句 6、返回首行首列值 7、执行sql语句返回datatable 1、安装System.Data.SQLite工具包 2、创建数据库 /// <summary> /// 数据库路径 …

深度学习模型压缩方法:知识蒸馏方法总结

本文将介绍深度学习模型压缩方法中的知识蒸馏,内容从知识蒸馏简介、知识的种类、蒸馏机制、师生网络结构、蒸馏算法以及蒸馏方法等六部部分展开。 一、知识蒸馏简介 知识蒸馏是指用教师模型来指导学生模型训练,通过蒸馏的方式让学生模型学习到教师模型的知识。在模型压缩中,…

在RT-Thread中使用SystemView进行调试分析

一、SystemView SystemView is a toolkit for visual analysis of any embedded system. SystemView gives complete insight into an application, to gain a deep understanding of the runtime behavior, going far beyond what a debugger is offering. This is particula…

VUE实现购物商城网站前端源码

文章目录 1.设计来源1.1 登录注册页面1.2 主界面1.3 列表界面1.4 详细界面1.5 购物车界面 2.源码2.1源码目录结构2.2源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/135054910 VUE实现购物商城网站前端源码&…