首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在QAbstractItemModel中包装QStringListModel将呈现空白列表

QAbstractItemModel是Qt框架中的一个抽象类,用于在模型-视图架构中提供数据的访问和修改。QStringListModel是QAbstractItemModel的一个具体实现,用于呈现字符串列表。

将QStringListModel包装在QAbstractItemModel中,可以通过重写QAbstractItemModel的虚函数来自定义数据的访问和修改方式。在这种情况下,我们可以通过重写rowCount()函数和data()函数来实现呈现空白列表。

以下是一个示例代码:

代码语言:txt
复制
#include <QAbstractItemModel>
#include <QStringListModel>

class MyModel : public QAbstractItemModel
{
public:
    MyModel(QObject *parent = nullptr)
        : QAbstractItemModel(parent)
    {
        QStringList data;
        model = new QStringListModel(data);
    }

    int rowCount(const QModelIndex &parent = QModelIndex()) const override
    {
        if (parent.isValid())
            return 0;
        else
            return model->rowCount();
    }

    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
    {
        if (!index.isValid())
            return QVariant();

        if (role == Qt::DisplayRole)
            return QVariant();

        return QVariant();
    }

private:
    QStringListModel *model;
};

在这个示例中,我们创建了一个自定义的模型类MyModel,继承自QAbstractItemModel。在构造函数中,我们创建了一个空的QStringListModel作为数据模型。

重写rowCount()函数时,我们检查父索引是否有效,如果有效则返回0,表示没有子项。如果父索引无效,则返回QStringListModel中的行数。

重写data()函数时,我们检查角色是否为Qt::DisplayRole,如果是,则返回一个空的QVariant,表示不显示任何数据。

这样,当我们将MyModel设置为视图的模型时,视图将呈现一个空白列表。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(信鸽):https://cloud.tencent.com/product/tpns
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/solution/virtual-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ Qt开发:数据库与TableView多组件联动

Qt,通常我们不会在TableView等组件中保存数据,一般会将这些数据存储至数据库或者是文件中保存,当使用时则动态的在数据库调出来,以下案例实现,当用户点击并选中TableView组件内的某一行时...使用这些方法,你可以应用执行 SQL 查询,并将结果显示相应的视图组件。...selectedIndexes() const 返回当前选择的项的索引列表。 clear() 清除模型的所有选择项。...QTableView,并通过 QDataWidgetMapper 选中行的数据映射到三个文本框,同时通过信号槽机制实现了底部编辑框显示当前选中行的功能。...// 关联到ListView数据表 QStringListModel *model; model = new QStringListModel(the_data); ui->listView->setModel

38110

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

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,Qt我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章重点介绍QStringListModel...该组件是用于Qt快速显示字符串列表的便捷模型类。...用途: QStringListModel 主要用于字符串列表(QStringList)与视图进行绑定,使得这些字符串可以视图中显示和管理。...接着,创建了一个 QStringListModel 对象 model 并使用 setStringList 方法先前创建的字符串列表导入模型。...然后,通过 ui->listView->setModel(model) 模型设置到 QListView ,从而使模型的数据 QListView 显示。

15710

【QT】QT模型视图

模型/视图编程 Qt的模型/视图架构用来实现大量的数据存储、处理及显示。...模型 所有的模型都基于QAbstractItemModel类,该类提供了十分灵活的接口来处理各种视图,这些视图的数据表现形式为表格(table)、列表(list)、树(tree)。...Qt提供了一些现成的模型来处理数据项: QStringListModel存储简单的QString项目列表; QStandardItemModel管理复杂的属性结构数据项,每一个数据项可以包含任意的数据;...QListView数据项显示为一个列表;QTableView模型的数据显示一个表格;QTreeView模型的数据项显示具有层次的列表。...QTableView和QTreeView显示项目的时候同时还可以显示标头,通过QHeaderView类实现。

2.9K10

QTreeView使用总结13,自定义model示例,大大优化性能和内存

1,简介 前面简单介绍过Qt的模型/视图框架,提到了Qt预定义的几个model类型: QStringListModel:存储简单的字符串列表 QStandardItemModel:可以用于树结构的存储...2,参考资料 豆子《Qt学习之路2》的几篇关于自定义model的文章: 自定义model之一: 自定义只读模型 自定义model之二: 自定义可编辑模型 自定义model之三: 布尔表达式树模型...示例只使用了10W行的数据量级 运行程序你就会发现,常规model初始化tree的过程就比自定义model慢很多,更可怕的是,它所占用的内存开销是自定义model的数倍甚至数十倍!...可见自定义model显示这10W条记录基本没使用多少内存,如果考虑百万、千万级别的数据,不使用自定义model或比较有效的优化方法,内存很快耗尽。...> #include #include "define.h" class TreeModel : public QAbstractItemModel { Q_OBJECT

1.8K30

26.QT-模型视图之自定义委托

初探自定义委托类  委托属于视图的子功能 视图主要负责组织具体数据项的显示方式(是列表方式,还是树形方式,还是表格方式) 委托主要负责具体数据项的显示和编辑,比如用户需要编辑某个数据时,则需要弹出编辑框...我们以编辑某个数据项为例: 视图首先会调用createEditor()函数生成编辑器 调用updateEditorGeometry()函数设置编辑器组件大小 调用setEditorData()函数,模型里的数据提取到编辑器...QAbstractItemDelegate * delegate )成员函数设置我们自定义的委托类对象即可 深入自定义委托类 之前我们写的自定义委托,每次都需要双击某个数据项,才能弹出编辑器 那如何让委托一直呈现在视图显示上呢...步骤如下: 重写委托类的paint成员函数 paint(),通过QApplication::style()->drawControl()来自定义数据显示方式,比如绘制按钮 重写委托类的editorEvent...成员函数 editorEvent处理交互事件,比如判断鼠标是否双击,以及更改模型数据等 其中QApplication::style()->drawControl()函数参数如下所示: QApplication

2.1K20

CC++ Qt StringListModel 字符串列表映射组件

StringListModel 字符串列表映射组件,该组件用于处理字符串与列表框组件数据的转换,通常该组件会配合ListView组件一起使用,例如ListView组件与Model模型绑定,当ListView...组件内有数据更新时,我们就可以利用映射数据模型的数值以字符串格式提取出来,同理也可实现将字符串赋值到指定的ListView组件内。...首先在UI界面中排版图片默认的MainWindow::MainWindow构造函数,我们首先初始化一个QStringList字符串链表并对该链表赋值,通过new QStringListModel(this...MainWindow::on_btnListAppend_clicked(){ model->insertRow(model->rowCount()); // 尾部插入一行...plaintextEdit组件,则需要通过model->stringList()获取到ListView的每行并将其赋值到QStringList字符串链表,最后通过循环的方式依次插入到plainTextEdit

73720

CC++ Qt ListWidget 列表框组件应用

,例如只显示IP地址,用户名等数据,如下笔记是本人在开发中经常用到的一些基本操作技巧,包括列表框组件的基本操作方法。...// 设置模型 ui->listView->setModel(model); //ui->listView->setFixedSize(200,300);}代码运行效果如下:图片上方代码我们多数都是使用...View视图组件,接下来具体分析Widget组件的使用细节,View组件与Widget组件看似一致,但却存在本质区别,其大致区别如下:Widget 组件可以直接通过如AddItem等一系列函数操作特定数据集...QString(current->text())); } }}代码运行效果如下:图片ListWidget 编辑状态设置: 默认情况下ListWidget组件内所有文件是不可编辑的,我们也可以编辑属性打开...else aItem->setCheckState(Qt::Unchecked); }}代码运行效果如下:图片ListWidget 指定位置插入/追加插入: 选中行的上方插入一行新的表项

1.2K20

CC++ Qt StringListModel 字符串列表映射组件

StringListModel 字符串列表映射组件,该组件用于处理字符串与列表框组件数据的转换,通常该组件会配合ListView组件一起使用,例如ListView组件与Model模型绑定,当ListView...组件内有数据更新时,我们就可以利用映射数据模型的数值以字符串格式提取出来,同理也可实现将字符串赋值到指定的ListView组件内。...首先在UI界面中排版 默认的MainWindow::MainWindow构造函数,我们首先初始化一个QStringList字符串链表并对该链表赋值,通过new QStringListModel(this...MainWindow::on_btnListAppend_clicked() { model->insertRow(model->rowCount()); // 尾部插入一行...plaintextEdit组件,则需要通过model->stringList()获取到ListView的每行并将其赋值到QStringList字符串链表,最后通过循环的方式依次插入到plainTextEdit

71510

C++ Qt开发:TableView与TreeView组件联动

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,Qt我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章重点介绍TableView...继续创建一个包含三个字符串列表的数组 DataList,每个列表代表一行数据。然后使用嵌套的循环遍历数组,数据逐个添加到模型。...tableView 和 treeView 上,最后通过循环数据逐个添加到模型。...如下代码我们通过model->rowCount()以及model->columnCount()获取到父UI界面tableView表格的行列数,并通过ptr->setRowColumn这些数据设置到了子对话框的编辑框上面...,弹出对话框之前,需要将当前表头元素复制到strList列表容器内,并通过使用子对话框的ptr->setHeaderList将其拷贝到子对话框,并通过QDialog::Accepted等待对话框按下修改按钮

33510

CC++ Qt ListWidget 列表框组件应用

,例如只显示IP地址,用户名等数据,如下笔记是本人在开发中经常用到的一些基本操作技巧,包括列表框组件的基本操作方法。...设置模型 ui->listView->setModel(model); //ui->listView->setFixedSize(200,300); } 代码运行效果如下: 上方代码我们多数都是使用...View视图组件,接下来具体分析Widget组件的使用细节,View组件与Widget组件看似一致,但却存在本质区别,其大致区别如下: Widget 组件可以直接通过如AddItem等一系列函数操作特定数据集...(current->text())); } } } 代码运行效果如下: ListWidget 编辑状态设置: 默认情况下ListWidget组件内所有文件是不可编辑的,我们也可以编辑属性打开...else aItem->setCheckState(Qt::Unchecked); } } 代码运行效果如下: ListWidget 指定位置插入/追加插入: 选中行的上方插入一行新的表项

1.1K20

Qt ModelView教程——只读Table

一直想学习Qt Model/View,最终还是看的官方教程,现在将官方教程重新梳理下。 每个UI开发人员都应该了解Model/View编程!可见Model/ViewUI编程的重要性!...,这种方法非常直观,但是,许多特别的应用程序,它会导致数据同步问题。 第二种方法是模型/视图编程,其中小部件不维护内部数据容器。 他们通过标准化接口访问外部数据,因此避免了数据重复。...可以通过读写表小部件提供的数据元素表小部件集成到程序。 此方法非常直观,许多应用程序很有用,但是使用标准表窗口部件显示和编辑数据库表可能会出现问题。...由于视图类不知道数据的结构,因此需要提供包装器以使数据符合QAbstractItemModel接口【译者注:这就是为什么要setMode】。...下一节介绍其他角色。 我们的示例,应显示的数据已生成。 实际的应用程序, MyModel会有一个名为MyData的成员,该成员充当所有读取和写入操作的目标。

1.9K20

Python完成SVG转PNG格式

一、完成目标: SVG格式的图标转换为PNG格式的图标,并预览 二、任务分析: svg是什么格式 : svg格式的图像可任意放大图形显示,而且边缘异常清晰,生成的文件很小,方便传输,文字svg图像中保留可编辑和可搜寻的状态...image.png五、完整的 五、完整的SvgToPng.py代码展示 import os import PIL.Image as Image from PySide2.QtCore import QStringListModel...# 打开文件路径显示文本框 self.ui.edit_svg.setText(self.file_name) # 得到源文件位置 self.image_name...self.file_name = QFileDialog.getExistingDirectory(None, '选择文件夹', '/') # 返回选中的文件夹路径 # 打开的文件夹路径显示文本框...的报错问题还未解决,正在尝试改变转换方式,暂时不影响程序运行 3、界面图标保存在与项目文件同一路径下的“image”文件夹,可能需要更新文件路径

3.8K20

Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

1、QTableView类 通常情况下,一个应用需要和一批数据(比如数组、列表)进行交互,然后以表格的形式输出这些信息,这时就要用到QTableView类了。...QtableView可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源。...QListView类的常用方法如下表所示: QListView类的常用信号如下表所示: 通过示例了解QListView类的使用方法,效果如下所示: 示例QListView控件的clicked...列表的每个条目都是一个QListWidgetltem对象。QListWidget可以设置为多重选择。...QListWidget类的常用方法如下表所示: QListWidget类的常用信号如下表所示: 通过示例了解QListWidget类的使用方法,效果如下所示: 示例QListWidget

3.8K30

Qt数据库sqlite总结

QSqlDatabase::drivers();//静态成员函数,是类的成员函数,不是对象的.返回所有可用的数据库驱动程序的清单 drivers.removeAll("QMYSQL3");  //删除列表的项...>query();           //返回与QSqlQuery相关的模型   query.exec("insert into student values (10,'yafei10')");//模型插入一条记录...使QSqlQueryModel类  创建的数据库能读写,继承QAbstractItemModel类 刚开始我们就讲到,这个模型默认是只读的,所以我们在窗口上并不能对表格的内容进行修改。...//tableview表格显示数据库数据 model = new QSqlTableModel(this); model->setTable("student");  //设置"student"的数据库表格...Qt的QSqlRelationalDelegate委托类就能实现这个功能 ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->

2.9K20

Qt 学习之路 2(45):模型

model/view 架构,model 提供一种标准接口,供视图和委托访问数据。 Qt ,这个接口由QAbstractItemModel类进行定义。...不管底层数据是如何存储的,只要是QAbstractItemModel的子类,都提供一种表格形式的层次结构。视图利用统一的转换来访问模型的数据。...一个简单的表格,每一个项都可以由行号和列号确定。...类似表格的视图中,比如列表和表格,行号和列号足以定位一个数据项。但是,对于树型结构,仅有两个参数就不足够了。这是因为树型结构是一个层次结构,而层次结构每一个节点都有可能是另外一个表格。...通常来说,数据项包含一系列不同的数据角色,这些角色定义Qt::ItemDataRole枚举

85920

图像标注版本3-多标注框+标注标签

参照labelImg的样式定义了一个自定义Dialog窗口,在这个窗口中加载了标注标签列表文件,同时这个标签是要必须选择的,或者取消。...QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) 二、实现自定义Dialog的相关功能 一个是初始化过程对标签列表文件的加载...from PyQt5.QtWidgets import QMainWindow, QApplication, QDialog,QMessageBox from PyQt5.QtCore import QStringListModel...dialogChooseLabel.getValue()=', Dialog.getValue()) sys.exit(app.exec_()) 三、对原来的MyLabel进行重写,参见加粗字体部分 引入了一个实时坐标的概念 鼠标移动事件...,不断根据鼠标位置进行实时绘制 鼠标释放事件,增加了一个对话框选择项,确认后将相关标注项加入到bboxlist(bboxlist相对于2.0版本有所调整) 绘制事件,修正了对实时标注框的单独绘制

18920

《QTreeView+QAbstractItemModel自定义模型》:系列教程之三

QStandardItemModel表示数据集具有以下优点: 实现代码简单 该类使用QStandardItem存放数据项,用户不必定义任何数据结构来存放数据项; QStandardItem使用自关联关系,能够表达列表...我们要将数据显示到QTreeView,按照Model/View框架介绍,需要定义2个类TreeModel和TreeItem,TreeModel继承于QAbstractItemModel,用于向View...QTreeView与TreeItem交互过程大致如下: 注意:,我们一般默认认为,只有column为0的单元格才能添加下级单元格,也就是说树的每一行单元格只能与Column为0的单元格建立父子关系...QAbstractItemModel定义如下: Q_INVOKABLE virtual QModelIndex index(int row, int column, const QModelIndex...节点下,第row行,第column列位置上创建索引;TreeItem指针保存至该索引。

4.2K10

Python完成SVG转PNG格式——方法二

一、前情提要 Python完成SVG转PNG格式,虽然图片格式成功转换了,但是会出现几个问题,如下所示 1、原本透明背景的SVG格式图片,转换成PNG格式之后,图片变成了白色的背景 白色背景变透明的方法可看我上一篇文章...# 打开文件路径显示文本框 self.ui.edit_svg.setText(self.file_name) # 得到源文件位置 self.image_name...= self.file_name # 转换格式 self.SvgToPng() # 显示转换后的png文件路径 slm = QStringListModel...self.file_name = QFileDialog.getExistingDirectory(None, '选择文件夹', '/') # 返回选中的文件夹路径 # 打开的文件夹路径显示文本框...if image_name_now == 'svg': del self.file_paths[self.file_index] # 去掉列表的重复项

5.1K30
领券