Qt工作笔记-依赖于QAbstractTableModel实现自定义TableModel
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-依赖于QAbstractTableModel实现自定义TableModel
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
理論
源碼
理論
設計模式里面有一句話叫 要依賴于抽象,不要依賴于具體。
但在Qt有些官方實例里,卻依賴于具體實現某一子功能,這可以是為了方便把,
但在TableModel有一個依賴與抽象,
官方解釋如下:
所以最少要實現這幾個函數,才能跑起來:
只有重寫了這幾個函數,虛表才能被覆蓋,調用自己寫的東西,實現自己想要的結果;
?
源碼
程序運行截圖如下:
程序結構如下:
源碼如下:
mytableviewmodel.h
#ifndef MYTABLEVIEWMODEL_H #define MYTABLEVIEWMODEL_H#include <QAbstractTableModel> #include <QVector>class MyTableViewModel: public QAbstractTableModel {Q_OBJECT public:MyTableViewModel();//必須實現這3個int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;//按照功能可選實現QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;//還可以實現如下的幾個函數//如:setData(),XXXX等函數//自己添加的函數,方便管理void addItem(QString one, QString two, QString three);private://方便數據存儲QVector<QVector<QString>> m_aryData; };#endif // MYTABLEVIEWMODEL_Hwidget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui; };#endif // WIDGET_Hmain.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }mytableviewmodel.cpp
#include "mytableviewmodel.h" #include <QDebug>MyTableViewModel::MyTableViewModel(): QAbstractTableModel(NULL) {}int MyTableViewModel::rowCount(const QModelIndex &parent) const {Q_UNUSED(parent)return m_aryData.size(); }int MyTableViewModel::columnCount(const QModelIndex &parent) const {Q_UNUSED(parent)return 3; }QVariant MyTableViewModel::data(const QModelIndex &index, int role) const {if(role == 0)return m_aryData[index.row()][index.column()];elsereturn QVariant(); }QVariant MyTableViewModel::headerData(int section, Qt::Orientation orientation, int role) const {if(role == Qt::DisplayRole && orientation == Qt::Horizontal){if(section == 0)return QStringLiteral("第一列");else if(section == 1)return QStringList("第二列");else if(section == 2)return QStringLiteral("第三列");}return QVariant(); }void MyTableViewModel::addItem(QString one, QString two, QString three) {beginInsertRows(QModelIndex(), m_aryData.size(),m_aryData.size());QVector<QString> list;list << one << two << three;m_aryData << list;endInsertRows(); }widget.cpp
#include "widget.h" #include "ui_widget.h" #include "mytableviewmodel.h" #include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);MyTableViewModel *model = new MyTableViewModel;model->addItem("data1", "data2", "data3");ui->tableView->setModel(model); }Widget::~Widget() {delete ui; }?
總結
以上是生活随笔為你收集整理的Qt工作笔记-依赖于QAbstractTableModel实现自定义TableModel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt学习笔记-web图片爬取器(webK
- 下一篇: C++设计模式-面向对象程序设计要点以及