模型视图的关系
## 常见模型
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();
}
效果: