QT之ComboBox角色使用QAbstractListModel
来源:互联网 发布:网络结构图 visio 编辑:程序博客网 时间:2024/06/05 11:28
实例如下,
comboxlistnodel.h文件
#ifndef COMBOXLISTNODEL_H#define COMBOXLISTNODEL_H#include <QAbstractListModel>#include <QList>class IolData{public: IolData(QVariant name,QVariant type,QVariant aval,QVariant sf,QVariant acdh, QVariant acdb,QVariant acds,QVariant a0,QVariant a1,QVariant a2) { m_iol_name = name; m_iol_type = type; m_iol_a = aval; m_iol_sf = sf; m_iol_acdh = acdh; m_iol_acdb = acdb; m_iol_acds = acds; m_iol_a0 = a0; m_iol_a1 = a1; m_iol_a2 = a2; }public: QVariant m_iol_name; QVariant m_iol_type; QVariant m_iol_a; QVariant m_iol_sf; QVariant m_iol_acdh; QVariant m_iol_acdb; QVariant m_iol_acds; QVariant m_iol_a0; QVariant m_iol_a1; QVariant m_iol_a2;};class comboxlistnodel: public QAbstractListModel{ Q_OBJECT Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)public: enum IolRoles {//枚举角色 NameRole = 0, TypeRole, ARole, SfRole, AcdHRole, AcdBRole, AcdSRole, A0Role, A1Role, A2Role }; int rowCount(const QModelIndex &parent = QModelIndex()) const; //QAbstractListModel是抽象类,所以需要实现下面两个函数 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; explicit comboxlistnodel(QObject *parent = 0); //////// ~comboxlistnodel(); int currentIndex(); void setCurrentIndex(int index);signals: void currentIndexChanged();protected: QHash<int, QByteArray> roleNames() const;private: QList<IolData> m_items; int m_current_index; QVariant roleData( IolData item,int role)const;};#endif // COMBOXLISTNODEL_H
这里是comboxlistnodel.cpp文件
#include "comboxlistnodel.h"int comboxlistnodel::rowCount(const QModelIndex &parent) const{ return m_items.count();}QVariant comboxlistnodel::data(const QModelIndex &index, int role) const{ if ((index.row() < 0) || (index.row() >= m_items.count())) { return QVariant(); } return roleData(m_items.at(index.row()),role);}comboxlistnodel::comboxlistnodel(QObject *parent){m_current_index = 0;IolData a(118,"aa","aa","aa","aa","aa","aa","aa","aa","aa");IolData b(119,"aa","aa","aa","aa","aa","aa","aa","aa","aa");IolData c(110,"aa","aa","aa","aa","aa","aa","aa","aa","aa");IolData d(111,"aa","aa","aa","aa","aa","aa","aa","aa","aa");m_items.push_back(a);m_items.push_back(b);m_items.push_back(c);m_items.push_back(d);}comboxlistnodel::~comboxlistnodel(){}int comboxlistnodel::currentIndex(){ return m_current_index;}void comboxlistnodel::setCurrentIndex(int index){ m_current_index = index; emit currentIndexChanged();}QHash<int, QByteArray> comboxlistnodel::roleNames() const//设置角色名{ QHash<int,QByteArray> roles; roles[NameRole] = "IolName"; roles[TypeRole] = "IolType"; roles[ARole ] = "IolA"; roles[SfRole ] = "IolSf"; roles[AcdHRole] = "IolAcdH"; roles[AcdBRole] = "IolAcdB"; roles[AcdSRole] = "IolAcdS"; roles[A0Role ] = "IolA0"; roles[A1Role ] = "IolA1"; roles[A2Role ] = "IolA2"; return roles;}QVariant comboxlistnodel::roleData(IolData item, int role) const{ QVariant ret; switch (role) { case NameRole: ret = item.m_iol_name; break; case TypeRole: ret = item.m_iol_type; break; case ARole: ret = item.m_iol_a; break; case SfRole: ret = item.m_iol_sf; break; case AcdHRole: ret = item.m_iol_acdh; break; case AcdBRole: ret = item.m_iol_acdb; break; case AcdSRole: ret = item.m_iol_acds; break; case A0Role: ret = item.m_iol_a0; break; case A1Role: ret = item.m_iol_a1; break; case A2Role: ret = item.m_iol_a2; break; default: ret = QVariant(); break; } return ret;}
main.cpp中
comboxlistnodel *appc=newcomboxlistnodel();
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("appc", appc );
qml中:
Rectangle{width:idViewTester.width;height: 60;color: "#3A3223";
ComboBox {
textRole: "IolName"
model:appc
}
}
效果:
0 0
- QT之ComboBox角色使用QAbstractListModel
- QAbstractListModel:Qml 使用C++model
- Qt控件之自定义ComboBox样式
- QT 图形视图框架之角色移动
- VC++ 之 ComboBox控件的使用
- Extjs之Combobox两级联动使用
- EXTJS4.x之combobox的使用
- Qt ComboBox 小结
- Combobox使用
- combobox使用
- 使用Qt动画框架设计角色的二维动画
- QT之sqllite使用
- Qt之UDP使用
- QT之QDirectPainter使用
- QT之QFileSystemWatcher使用
- Qt之QSS使用
- Qt之MVC使用
- Qt之使用qmake
- mybaits中查询中对象中存在对象(可能是单一对象,可能是集合)
- 快速幂详解——2017中国大学生程序设计竞赛
- 代码重构笔记
- 【Oracle sql基础】trunc()函数的用法
- 分针网—IT教育: 关于Node.js的__dirname,__filename,process.cwd(),./文件路径的一些坑
- QT之ComboBox角色使用QAbstractListModel
- VS2013无法加载解决方案中的项目
- js:显示倒计时之后跳转另外的页面
- FileItem类的常用方法:
- 修改ios.js
- NodeJS模块
- TreeSet按照字符串长度进行排序
- POJ3169
- Ionic2+node+cordova+SDK+phonegap安装教程