qt模型视图总结

本文深入探讨了Qt中模型视图架构的概念,包括QAbstractListModel、QAbstractTableModel和QStandardItemModel等常见模型,以及QListView、QTableView和QTreeView等视图组件。通过实例展示了如何使用QStandardItem进行数据填充,并解释了数据角色的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模型视图的关系

在这里插入图片描述

## 常见模型

在这里插入图片描述

1 QAbstractListModel:用来创建一维列表模型

2 QAbstractTableModel: 用来创建二维列表模型

3 QStandardItemModel:用来存储定制数据的通用模型

在这里插入图片描述

4 QFileSystemModel:本地系统的文件和目录信息

5 数据库模型: QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel:存取数据库数据

常见视图

在这里插入图片描述
1 QListView:用于显示列表
在这里插入图片描述

	QListView m_listView;
	m_listView.setParent(this);
    m_listView.move(10, 120);
    m_listView.resize(300, 100);

2 QTableView:用于显示表格
在这里插入图片描述

	QTableView m_tableView;

	m_tableView.setParent(this);
    m_tableView.move(10, 10);
    m_tableView.resize(300, 100);


3 QTreeView:用于显示层次数据
在这里插入图片描述

	QTreeView m_treeView;
	 m_treeView.setParent(this);
    m_treeView.move(10, 230);
    m_treeView.resize(300, 100);

往模型里面放数据:数据项类QStandardItem

在这里插入图片描述

数据角色

在这里插入图片描述
项目代码:

/*MainWindow.h*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QTableView>
#include <QTreeView>
#include <QListView>
#include <QStandardItemModel>
class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    QStandardItemModel m_standerdModel;
    QTableView m_tableView;
    QTreeView m_treeView;
    QListView m_listView;
    void initStanderdModel();
    void initTableModel();
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

#endif // MAINWINDOW_H



/*MainWindow.cpp*/
#include "MainWindow.h"
#include <QStandardItem>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent, Qt::WindowContextHelpButtonHint)
{
    initStanderdModel();
    initTableModel();
    m_tableView.setModel(&m_standerdModel);
    m_treeView.setModel(&m_standerdModel);
    m_listView.setModel(&m_standerdModel);
}
void MainWindow::initStanderdModel()
{
    QStandardItem* root = m_standerdModel.invisibleRootItem();
    QStandardItem* itemA = new QStandardItem();
    QStandardItem* itemB = new QStandardItem();
    QStandardItem* itemC = new QStandardItem();
    QStandardItem* itemChild = new QStandardItem();

    itemA->setData("A", Qt::DisplayRole);
    itemA->setData("Tip A", Qt::ToolTipRole);
    itemA->setData("Help A", Qt::WhatsThisRole);
    itemB->setData("B", Qt::DisplayRole);
    itemB->setData("Tip B", Qt::ToolTipRole);
    itemC->setData("C", Qt::DisplayRole);
    itemC->setData("Tip B", Qt::ToolTipRole);
    itemC->setData("Help C", Qt::WhatsThisRole);

    itemChild->setData("Child", Qt::DisplayRole);
    itemChild->setData("Tip Child", Qt::ToolTipRole);
    itemChild->setData("Help Child", Qt::WhatsThisRole);

    itemC->setChild(0, 0, itemChild);


    root->setChild(0, 0, itemA);//itemA、itemB、itemC都是new出来的,这里将数据项
    root->setChild(0, 1, itemB);//加入模型的同时也相当于指定了父组件,不会造成内存泄漏
    root->setChild(1, 0, itemC);

}
void MainWindow::initTableModel()
{
    m_tableView.resize(300,100);
    m_tableView.move(10,10);
    m_tableView.setParent(this);

    m_treeView.resize(300,100);
    m_treeView.move(10,120);
    m_treeView.setParent(this);

    m_listView.resize(300,100);
    m_listView.move(10,230);
    m_listView.setParent(this);
}
MainWindow::~MainWindow()
{
    
}


/*main.cpp*/
#include <QtGui/QApplication>
#include "MainWindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();
}


效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值