QAbstractListModel:Qml 使用C++model
来源:互联网 发布:mysql 有符号整型 编辑:程序博客网 时间:2024/06/06 03:51
主要是几个虚函数的实现,可查看QAbstractListModel的父类
主要是对内部维护的动态数组进行操作
具体实现:
#ifndef MYMODEL_H#define MYMODEL_H#include <QAbstractListModel>#include <QHash>#include <QList>#include <QByteArray>#include <QDebug>#include <vector>class mydata{public: mydata(const QString& data1, const QString& data2):mdata1(data1),mdata2(data2) { } QString data1() const { return this->mdata1; } QString data2() const { return this->mdata2; } QVariant obj;//当前model的组件对象private: QString mdata1; QString mdata2;};class MyModel :public QAbstractListModel{ Q_OBJECTpublic: enum datatype{ type1=1, type2, type3 }; MyModel(QObject* parent=NULL); //外部接口 QML调用 添加数据 Q_INVOKABLE void pushdata(const QString& data1, const QString& data2); //外部接口 QML调用 添加数据在指定行 Q_INVOKABLE void minsert(int index, const QString& data1, const QString& data2); //外部接口 删除指定行 Q_INVOKABLE void mremove(int index); //外部接口 C++调用 添加数据 void Add(mydata& md); //外部接口 清除model Q_INVOKABLE void clear(); //虚函数 qml内部调用 获取第index行的内容 role 内容索引 QVariant data(const QModelIndex &index, int role =Qt::DisplayRole) const; //虚函数 获取model行数 int rowCount(const QModelIndex &parent = QModelIndex() ) const; // 虚函数 内容的别名 qml 内部调用 QHash<int, QByteArray> roleNames() const; //自定义 设置当前model第index行的当前组件指针 Q_INVOKABLE void setcuritem(int index , QVariant j) { //qDebug()<<j; m_datas[index].obj = j; } ~MyModel() {}private: //model数据集合 std::vector<mydata> m_datas;};#endif
#include "mymodel.h"MyModel::MyModel(QObject* parent) :QAbstractListModel(parent){}void MyModel::Add(mydata& md){ beginInsertRows(QModelIndex(), rowCount(), rowCount()); m_datas.push_back(md); endInsertRows();}void MyModel::clear(){ //清除rows 界面将不显示 beginRemoveRows(QModelIndex(), 0, m_datas.size()); //清空动态数组 m_datas.clear(); endRemoveRows(); //end}//外部接口 QML调用 添加数据在指定行void MyModel::minsert(int index, const QString& data1, const QString& data2){ mydata d(data1, data2); beginInsertRows(QModelIndex(), index, index); m_datas.insert(m_datas.begin()+index, d); endInsertRows();}void MyModel::mremove(int index){ beginRemoveRows(QModelIndex(), index, index); m_datas.erase(m_datas.begin() + index); endRemoveRows();}void MyModel::pushdata(const QString& data1, const QString& data2){ mydata d(data1, data2); Add(d);}int MyModel::rowCount(const QModelIndex &parent) const{ Q_UNUSED(parent); return m_datas.size();}QVariant MyModel::data(const QModelIndex &index, int role) const{ if (index.row() < 0 || index.row() >= m_datas.size()) { return QVariant(); } const mydata& d = m_datas[index.row()]; if (role == datatype::type1) { return d.data1(); } else if (role == datatype::type2) { return d.data2(); } else if (role == datatype::type3) { return d.obj; } return QVariant();}//定义数据别名 QHash<int, QByteArray> 父类规定的QHash<int, QByteArray> MyModel::roleNames() const{ QHash<int, QByteArray> d; d[datatype::type1] = "data1"; d[datatype::type2] = "data2"; d[datatype::type3] = "curitem"; return d;}
#include <QGuiApplication>#include <QQmlApplicationEngine>#include<qmlglobaldata.h>#include<QQmlContext>#include "mymodel.h"int main(int argc, char *argv[]){ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); MyModel * m = new MyModel(); mydata xx("aaa,", "aaa2"); m->Add(xx); mydata xx2("bbb,", "bbb2"); m->Add(xx2); QQmlApplicationEngine engine; engine.rootContext()->setContextProperty("mymodel", m); engine.load(QUrl(QLatin1String("qrc:/main.qml"))); return app.exec();}
import QtQuick 2.7import QtQuick.Controls 2.0import QtQuick.Layouts 1.0ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Hello World") ListView{ anchors.fill: parent model:mymodel delegate: Text { id: name text: model.data1 +model.data2 Component.onCompleted: { mymodel.setcuritem(index,this) console.log(curitem) } } Component.onCompleted: { for(var x =0;x<100;x++) { mymodel.pushdata(x+"a,",x+"b"); } } }}
0 0
- QAbstractListModel:Qml 使用C++model
- ObjectModel:Qml 使用C++model
- QT之ComboBox角色使用QAbstractListModel
- QML使用数据库存储Model数据
- QML使用C++定义的model
- QML数据模型(Model)
- QML数据模型(Model)
- QML数据模型(Model)
- 在QML应用中使用VisualItemModel让QML Item成为model来显示数据
- QML C++ TableView + Model 处理
- 如何在QML应用中设计一个C++ Model并使用它
- 单例模式的简单使用(QML调用C++)
- QML BOOK 第六章 Model-View-Delegate
- 关于QML中的listView的model
- Qml中的model-view-delegate实例
- QML model-veiw 元素之间间隔控制
- QML使用loader加载qml文件到QML
- QML之使用Loader加载QML组件
- C语言setgroups()函数:设置组代码函数
- GitHub上那些值得一试的JAVA开源库
- MySQL 安装脚本
- 嵌入式开发第6天(指针,解引用和取地址,数组之间的地址差值,gdb)
- android全局Dialog
- QAbstractListModel:Qml 使用C++model
- Same Tree
- JProfiler使用详细教程学习笔记
- git提交代码
- ios基础控件UIAlertView与UIActionSheet
- 沙盒结构&常见的文件存储方式
- 05:字符环
- ubuntu 16.04 无法挂起休眠等问题
- java读写文件(可指定编码)