日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt工作笔记-依赖于QAbstractTableModel实现自定义TableModel

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt工作笔记-依赖于QAbstractTableModel实现自定义TableModel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

理論

源碼


理論

設計模式里面有一句話叫 要依賴于抽象,不要依賴于具體。

但在Qt有些官方實例里,卻依賴于具體實現某一子功能,這可以是為了方便把,

但在TableModel有一個依賴與抽象,

官方解釋如下:


所以最少要實現這幾個函數,才能跑起來:

//必須實現這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;

只有重寫了這幾個函數,虛表才能被覆蓋,調用自己寫的東西,實現自己想要的結果;

?

源碼

程序運行截圖如下:

程序結構如下:

源碼如下:

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_H

widget.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_H

main.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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。