QListView可以用来以列表的形式展示数据,在Qt中使用model/View结构来管理数据与视图的关系,model负责数据的存取,数据的交互则通过delegate来实现。
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
- #include
- #include
- #include
-
- 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
-
- 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
(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