当前位置:网站首页>QListView的使用
QListView的使用
2022-08-02 11:38:00 【物随心转】
一、介绍
QListView可以用来以列表的形式展示数据,在Qt中使用model/View结构来管理数据与视图的关系,model负责数据的存取,数据的交互则通过delegate来实现。
二、model
QT提供了一些现成的models用于处理数据项:
QStringListModel 用于存储简单的QString列表。
QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。
QDirModel 提供本地文件系统中的文件与目录信息。
QSqlQueryModel 对SQL的查询结果集进行封装
QSqlTableModel 对SQL中的table进行封装。
QSortFilterProxyModel 对另一个model执行sort and/or filter
model中存放的每项数据都有相应的"model index",由QModelIndex类来表示。每个index由三个部分构成:row,column和表明所属model的指针。对于一维的list model,column部分永远为0。
三、实例
这里分别使用QStringListModel与QStandardItemModel 展示了ListView显示数据。
2.1 首先,使用qtcreator创建一个widget项目,各种设置一律采用默认。

2.2 打开项目中的界面文件,然后我们在界面中拖入一个listview控件。
2.3 然后,打开mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStringListModel>
#include <QStandardItemModel>
#include <QModelIndex>
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;
public:
QStringListModel *Model;
QStandardItemModel *ItemModel;
void init();
private slots:
void showClick(QModelIndex index);
};
#endif // MAINWINDOW_H
打开mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
init();
}
void MainWindow::init()
{
// QStringListModel的使用
// QStringList strlist;
// strlist<<"A"<<"B"<<"C"<<"D";
// Model = new QStringListModel(strlist);
// ui->listView->setModel(Model);
// Model = new QStringListModel(this);
// Model->setStringList(QStringList()<<"语文"<<"数学"<<"英语");
// ui->listView->setModel(Model);
ItemModel = new QStandardItemModel(this);
QStringList strList; // 需要展示的数据
strList.append("A");
strList.append("B");
strList.append("C");
strList.append("D");
strList.append("E");
strList.append("F");
strList.append("G");
int nCount = strList.size();
for(int i = 0; i < nCount; i++)
{
QString string = static_cast<QString>(strList.at(i));
QStandardItem *item = new QStandardItem(string);
ItemModel->appendRow(item);
}
ui->listView->setModel(ItemModel); // listview设置Model
ui->listView->setFixedSize(200,300);
// 绑定事件
connect(ui->listView,SIGNAL(clicked(QModelIndex)),this,SLOT(showClick(QModelIndex)));
}
void MainWindow::showClick(QModelIndex index)
{
QString strTemp;
strTemp = index.data().toString();
QMessageBox msg;
msg.setText(strTemp);
msg.exec();
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果

参考:
QT--QlistView 简单应用_yifanmoon的博客-CSDN博客_qlistview
边栏推荐
猜你喜欢

Shell编程案例

如何通过DBeaver 连接 TDengine?

“纯C”实现——三子棋小游戏

STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)

【kali-信息收集】(1.8)ARP侦查工具_Netdiscover

jacoco的学习以及理解

Outsourced Student Management System Architecture Documentation

Nanny Level Tutorial: Write Your Own Mobile Apps and Mini Programs (Part 2)

Swift中什么时候不能用 () 代替 Void 来使用

基于深度学习的裂缝检测技术
随机推荐
npm run dev 和 npm run serve区别
SQL 数据更新
看我如何用多线程,帮助运营小姐姐解决数据校对系统变慢!
【项目管理技术的优势】
ansible模块--copy模块
How to connect TDengine through DBeaver?
【2022 小目标检测综述】Towards Large-Scale Small Object Detection: Survey and Benchmarks
Hub and Spoke配置案例
Problem solving in the process of using mosquitto
C#/VB.NET to add more lines more columns image watermark into the Word document
10份重磅报告 — 展望中国数字经济未来
Oracle降低高水位
学习经验分享之七:YOLOv5代码中文注释
Camera Hal OEM模块 ---- cmr_snapshot.c
AQS-AbstractQueuedSynchronizer
Swift中什么时候不能用 () 代替 Void 来使用
【kali-信息收集】(1.9)Metasploit+搜索引擎工具Shodan
Learning Experience Sharing Seven: YOLOv5 Code Chinese Comments
QT笔记——QT类反射机制简单学习
喜迎八一 《社会企业开展应聘文职人员培训规范》团体标准出版发行会暨橄榄枝大课堂上线发布会在北京举行