QTableView,Model/View的运用(1),QAbstractTableModel
2016-09-27 23:01
405 查看
Qt的Model/View模式相当强大,下面我们就来看一个QTableView运用QAbstractTableModel的例子。
由于QAbstractTableModel是个抽象类,所以必须自己重新写一个类来继承它。
下面就是我自己写的一个类TableView
头文件:TableModel.h
这样,一个自己的tableModel类就已经完成了。
下面建立一个UI界面,MainWindow来做测试
MainWindow.h
MainWindow.cpp
实现效果图如下:
由于QAbstractTableModel是个抽象类,所以必须自己重新写一个类来继承它。
下面就是我自己写的一个类TableView
头文件:TableModel.h
#ifndef TABLEMODEL_H #define TABLEMODEL_H #include <QAbstractTableModel> class TableModel : public QAbstractTableModel { Q_OBJECT public: 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_OBJECT public: 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); }
实现效果图如下:
相关文章推荐
- Qt之QTableView添加复选框(QAbstractTableModel)
- QTableView与QAbstractTableModel的使用
- Qt之QTableView添加复选框(QAbstractTableModel)
- QTableView中嵌入复选框CheckBox 的四种方法总结:设置QAbstractTableModel的flags()函数法。
- Qt之QTableView添加复选框(QAbstractTableModel)
- 解决 通过继承QAbstractTableModel并实现headerData方法给QTableView添加标题时,标题不显示 的问题
- QSqlTableModel配合QTableView设置单元格对齐方式和前景色等
- QSqlTableModel +QTableView 无法更新数据库
- QTableView,Model/View的运用(2),QSqlTableModel
- QSqlTableModel和QTableView设置复选框
- Qt中Qtableview的使用1(QSqlTableModel模型)
- 2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理
- QAbstractTableModel ------ Model-View-Control(MVC)架构(3)
- QTableview QSqlTableModel如何最恰当地只显示一个表中的某几个字段的数据
- Qt Model/View/Delegate浅谈 - QAbstractListModel
- 我谈Silverlight架构和模式运用1-- ModelView模式最简单教程-讲解无代码触发事件,以及类型转换器的强大功能
- javafx由浅到深的认识(二)——Pagination控件和TableView控件的运用
- Qt实用技巧:使用QTableView、QSqlTableMode与QSqlDatabase对数据库数据进行操作
- Qt中的QStandardItemModel内容改变并通过TableView同步显示。
- 优化tableView加载cell与model的过程