QTableView,Model/View的运用(1),QAbstractTableModel
来源:互联网 发布:阿里云机顶盒刷机固件 编辑:程序博客网 时间:2024/04/30 09:18
Qt的Model/View模式相当强大,下面我们就来看一个QTableView运用QAbstractTableModel的例子。
由于QAbstractTableModel是个抽象类,所以必须自己重新写一个类来继承它。
下面就是我自己写的一个类TableView
头文件:TableModel.h
#ifndef TABLEMODEL_H#define TABLEMODEL_H#include <QAbstractTableModel>class TableModel : public QAbstractTableModel{ Q_OBJECTpublic: explicit TableModel(QObject *parent = 0); /** * @brief rowCount 虚函数,重写 * @param parent * @return 返回table的行 */ virtual int rowCount(const QModelIndex &parent) const; /** * @brief columnCount 虚函数,重写 * @param parent * @return 返回table的列 */ virtual int columnCount(const QModelIndex &parent) const; /** * @brief data 虚函数,重写 * @param index * @param role 控制每个Index的角色 * @return 返回每个Index的值 */ virtual QVariant data(const QModelIndex &index, int role) const; /** * @brief headerData 虚函数,重写 * @param section header的索引,依次递增 * @param orientation 横向头/纵向头 * @param role 每个headIndex的角色 * @return 返回每个headIndex的值 */ virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;};#endif // TABLEMODEL_H源文件TableModel.cpp:
#include "tablemodel.h"TableModel::TableModel(QObject *parent) : QAbstractTableModel(parent){}int TableModel::rowCount(const QModelIndex &parent) const{ return 5;//5行}int TableModel::columnCount(const QModelIndex &parent) const{ return 4;//5列}QVariant TableModel::data(const QModelIndex &index, int role) const{ if(!index.isValid()) //安全判断 { return QVariant(); } if(Qt::TextAlignmentRole == role) { return int(Qt::AlignHCenter | Qt::AlignVCenter); } else if(Qt::DisplayRole == role) //这里这样写是为了过滤掉其他role(例如过滤掉checkBox) { return 1;//在所有的index中显示1(当然也可以根据index的不同显示不同的值) } return QVariant();}QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const{ if(Qt::DisplayRole != role) { return QVariant(); } if(orientation == Qt::Horizontal) //横向头 { return section + 1;//横向头一次递增 } else if(orientation == Qt::Vertical) //纵向头 { return section + 1;//纵向头依次递增 } return QVariant();}
这样,一个自己的tableModel类就已经完成了。
下面建立一个UI界面,MainWindow来做测试
MainWindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>class TableModel;class QSqlTableModel;namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private: void initUI();private: Ui::MainWindow *ui; TableModel* m_pModel;};#endif // MAINWINDOW_H
MainWindow.cpp
#include "MainWindow.h"#include "ui_mainwindow.h"#include "tablemodel.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); initUI();}MainWindow::~MainWindow(){ delete ui;}void MainWindow::initUI(){ m_pModel = new TableModel(ui->tableView); ui->tableView->setModel(m_pModel);}
实现效果图如下:
0 0
- QTableView,Model/View的运用(1),QAbstractTableModel
- QTableView,Model/View的运用(2),QSqlTableModel
- QTableView,Model/View的运用(3),QSortFilterProxyModel
- QTableView与QAbstractTableModel的使用
- QAbstractTableModel ------ Model-View-Control(MVC)架构(3)
- qtableview + QAbstractTableModel 表头排序
- QTableView ------ Model-View-Control(MVC)架构(4)
- QTableView中嵌入复选框CheckBox 的四种方法总结:设置QAbstractTableModel的flags()函数法。
- 解决 通过继承QAbstractTableModel并实现headerData方法给QTableView添加标题时,标题不显示 的问题
- QAbstractTableModel的使用
- 关于model的运用
- Qt之QTableView添加复选框(QAbstractTableModel)
- Qt的Model/View
- Qt 的Model/View
- Qt的model/view
- Qt Model/View 1
- Qt Model-View (1)
- Qt的Model/View (二)
- 计算机数学
- nginx大量TIME_WAIT的解决办法
- XGBoost-Python完全调参指南-参数解释篇
- Effective Java 2.0_Item 1_中英文对照
- 用于快餐行业的自动化餐厅系统构想
- QTableView,Model/View的运用(1),QAbstractTableModel
- Sicily 1001 Alphacode
- HDU 3294 Girl's research(最长回文子串)
- 数据库的关系运算
- Stock Charts(Google Code Jam 2009 Round2 C)二分图最大匹配
- 【No13】黑马安卓52期视频下载 共64.2G 视频教程下载
- 长沙培训杂记d
- Shell 脚本
- tianchai 12032 解救小哈(DFS或者BFS模版)