一、相关内容了解:
<此段可以回头再看>
在做QT列表操作的时候得对下面几个名词的概念做简单的了解:
QAbstractItemModel:一个抽象的类,为数据项模型提供抽象的接口,常见的的数据模型列如:QStringListModel,QStandardItemMode,QDirModel等都继承于此类;
QStringListModel:数据模型,储存一组字符串;
QList:列表类,以列表形态储存并管理其中的列表元素,并支持基于快速索引的数据存取,也可进行快速的数据删除操作;
QStringList:从QList继承而来,字符串列表类;
QListView:列表示图封装类,用来显示一维(一列)数据列表,二维数据列表可以用QTableView控件;
二、主要思想
先把数据组织好保存到数字模型中,再将数据模型设置到列表视图控件中(树形控件也是如此)。
三、实践
我们以字符串列表操作为例:
-
显示采用ListView控件;
-
数据模型用QStringListModel;
我们首先要构造一个QStringListModel,这个数据模型最简单的方法就是采用现有的数据模型进行构造,我们进行如下操作;
要用到QStringListModel,需要包含头文件:
#include<QStringListModel>
在.h文件中添加我们需要的两个成员变量:
QStringListModel *model;
QStringList strlist;
在.cpp需要的位置添加:
model= new QStringListModel(this);
model->setStringList(strlist);
ui->listView->setModel(model);
四、最后贴上简短的示例说明:
- 代码
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStringListModel>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QStringListModel *model; //添加
QStringList strlist; //添加
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
strlist<<"第一行内容"; //添加 数据类别添加内容
strlist<<"第二行内容"; //添加 数据类别添加内容
model= new QStringListModel(this); //添加 创建一个数据模型
model->setStringList(strlist); //添加 数据组织好保存到数字模型中
ui->listView->setModel(model); //添加 数据模型设置到列表视图控件中
}
MainWindow::~MainWindow()
{
delete ui;
}
mainwindow.ui
- 项目结构(红框文件添加了代码)
- 运行结果:
五、其他常用操作:
model->removeRows(0,2) ;//从0行开始删除两行,QStringListModel类的操作函数;
model->rowCount();//返回总行数
model->index(0,0).data();//获取0行,0列的数据
数据模型常用的还有flags(),setdata()等,具体请翻阅QAbstractItemModel,QStringListModel,QStringList,ListView类的相关函数进行操作。
如果要刷新显示数据请用:
model.setStringList(strlist);
ui->ListView->viewport()->update();//故障列表刷新