C++ Qt开发:StringListModel字符串列表映射组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStringListModel字符串映射组件的常用方法及灵活运用。
QStringListModel 是 Qt 中用于处理字符串列表数据的模型类之一,它是 QAbstractListModel 的子类,用于在 Qt 的视图类(如 QListView、QComboBox 等)中显示字符串列表。该组件是用于在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 中使用 QStringListModel 和 QListView 来展示一个字符串列表。
以下是该代码的一些说明:
- 在构造函数中,首先使用
QStringList theStringList创建了一个字符串列表,并向其中添加了一些城市名称。 - 接着,创建了一个
QStringListModel对象model并使用setStringList方法将先前创建的字符串列表导入模型中。 - 然后,通过
ui->listView->setModel(model)将模型设置到QListView中,从而使模型中的数据在QListView中显示。 - 使用
setEditTriggers方法设置了编辑触发器,使得可以通过双击或选择项目来触发编辑操作。
这样,通过 QStringListModel 和 QListView 的结合使用,可以很方便地在界面上展示和管理字符串列表的数据。
#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 中添加或插入数据。
以下是代码的一些说明:
on_btnListAppend_clicked方法用于在QStringListModel的末尾添加一行。具体步骤包括:- 使用
insertRow在模型的末尾插入一行。 - 获取最后一行的索引。
- 从界面的
lineEdit获取输入的文本。 - 使用
setData方法将文本设置到模型的指定索引处。 - 使用
setCurrentIndex方法将最后一行设置为当前选中行。 - 清空输入框。
- 使用
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(","));
}
}
当点击显示数据模型时,则会将列表转换为字符串并按照特定格式输出到编辑框内,如下图所示;

附件下载
C++ Qt开发:StringListModel字符串列表映射组件的更多相关文章
- C/C++ Qt StringListModel 字符串列表映射组件
StringListModel 字符串列表映射组件,该组件用于处理字符串与列表框组件中数据的转换,通常该组件会配合ListView组件一起使用,例如将ListView组件与Model模型绑定,当Lis ...
- C/C++ Qt ListWidget 列表框组件应用
ListWidget列表框组件,该组件与TreeWidget有些相似,区别在于TreeWidget可以实现嵌套以及多字段结构,而ListWidget组件则只能实现单字段结构,ListWidget组件常 ...
- Qt大型工程开发技术选型Part3:Qt调用C#编写的COM组件实例
Qt大型工程开发技术选型Part3:Qt调用C#编写的COM组件实例以及错误总结 ok,前面铺垫了那么多,现在来写一个开发实例,我会把其中隐藏的坑和陷阱简单谈谈,并在文章最后总结. 不愿意看长篇大论的 ...
- 第11课 Qt中的字符串类
1. 历史遗留问题和解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串 ②C语言用字符数组和一组函数实现字符串操作 ③C语言不支持自定义类型,因此无法获得字符串类型 (2)解决方案 ①从C ...
- SNF快速开发平台MVC-高级查询组件
1. 高级查询 在我们做项目的时候经常想要按名称.编号进行查询数据,可在开发时会把最常用的查询条件写上,不常用的就不写了,也是因为把所有字段都写上太多了,布局不好看而且不实用.还有些查询条件几百年 ...
- Qt开发环境下载和安装
Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org ...
- QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程
1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...
- Qt定制控件列表
目录 炫酷进度条 提示框 小时钟 高仿excel表格 多级表头表格 多级表头树控件 多维度折线图 表格控件-蚂蚁线 日历控件 饼图 窗体靠边自动隐藏 下拉框内容定制 模仿QQ上传头像 菜单定制 属性表 ...
- 循序渐进VUE+Element 前端应用开发(25)--- 各种界面组件的使用(1)
在我们使用Vue+Element开发前端的时候,往往涉及到很多界面组件的使用,其中很多直接采用Element官方的案例即可,有些则是在这个基础上封装更好利用.更少代码的组件:另外有些则是直接采用第三方 ...
- Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解
前话 Qt的图形视图框架,最核心的三个类为:QGraphicsScene.QGraphicsItem与QGraphicsView. 基于图形框架的高级白板软件Demo QGraphicsSce ...
随机推荐
- 微服务下使用maven做多环境配置
分享技术,用心生活 前言:很多项目在开发,提测,上线时都会提前手动改一些配置文件来适应对应环境,麻烦不说了,而且也容易出错:生产环境的配置也容易暴露.基于此,我们基于spring cloud alib ...
- dotnet SemanticKernel 入门 自定义变量和技能
本文将告诉大家如何在 SemanticKernel 框架内定义自定义的变量和如何开发自定义的技能 本文属于 SemanticKernel 入门系列博客,更多博客内容请参阅我的 博客导航 自定义变量是一 ...
- word2010中统一调整表格格式
word中统一调整表格格式基本思路是: 1.选中所有的表格. 2.再对表格格式调整. 选中所有表格需要用到宏,操作很简单,具体操作如下: (1)工具栏"视图"下右下角&quo ...
- 第2章 Git安装
兄弟,恭喜你,刷到这篇超详细安装GIt教程,就让Codeyang带你一步一步的安装Git!~~ Git官网地址: https://git-scm.com/ 查看 GNU 协议,可以直接点击下一步. 选 ...
- 面霸的自我修养:ThreadLocal专题
王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是<面霸的自我修养>第5篇文章,我们一起来看看面试中会问到哪些关于ThreadLocal ...
- 地理探测器Geodetector下载、使用、结果分析方法
本文介绍Geodetector软件的下载方法,以及地理探测器分析的完整操作,并对其结果加以解读. 首先,我们介绍Geodetector软件的下载方法.进入软件官网,可以看到其中的第四个部分为软 ...
- 背景图片随机API
在美化博客园的时候,遇到了一个问题:博客背景图片只支持一张图片,看到有道友说可以用API随机图片. 于是就有了这篇文章. 本文主要整理了一些随机图片API,希望对你有帮助. 岁月小筑 https:// ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-20-处理鼠标拖拽-下篇
1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,其次有人私信宏哥说是有那种类 ...
- Python如何在日志中隐藏明文密码
Python如何在日志中隐藏明文密码 前言 在项目开发中,有的时候会遇到一些安全需求,用以提升程序整体的安全性,提高外来非法攻击的门槛,而在日志中隐藏明文密码打印便是最典型的安全需求之一. 在Pyth ...
- 以效率为导向:用ChatGPT和HttpRunner实现敏捷自动化测试(二)
1.前言 在上一篇文章: 利用ChatGPT提升测试工作效率--测试工程师的新利器(一)中,我们提到了如何通过chatGPT生成单接口测试用例,然后再让chatGPT去根据测试用例去生成接口自动化脚本 ...