Qt学习之路之模型
2014-12-29 07:18
375 查看
自定义模型, 可以从类QAbstractTableModel类继承~~
下面是实现数值代码转换成文字的模型的一个简单实例。
~~~~~~~~~~~~~直接放码~~~~~~~~~~~~~
model_widget.h
下面是实现数值代码转换成文字的模型的一个简单实例。
~~~~~~~~~~~~~直接放码~~~~~~~~~~~~~
model_widget.h
#ifndef MODELWIDGET_H #define MODELWIDGET_H #include <QAbstractTableModel> #include <QVector> #include <QMap> #include <QStringList> #include <QTextCodec> class ModelWidget : public QAbstractTableModel { public: explicit ModelWidget(QObject *parent = 0); int rowCount(const QModelIndex &parent=QModelIndex()) const; int columnCount(const QModelIndex &parent=QModelIndex()) const; QVariant data(const QModelIndex &index, int iRole) const; QVariant headerData(int section, Qt :: Orientation orientation, int iRole) const; //--返回表头数据 private: QVector<short> Role; QVector<short> RoleType; //--使用QMap保存数据结构为“数值-文字” QMap<short, QString> RoleMap; QMap<short, QString> RoleTypeMap; QStringList RoleList; QStringList header; void InitTableData(); //--初始化表格数据并填充 }; #endif //MODELWIDGET_Hmodel_widget.cpp
#include "model_widget.h" ModelWidget::ModelWidget(QObject *parent /*= 0*/) : QAbstractTableModel(parent) { //---解决中文乱码 QTextCodec *codec = QTextCodec::codecForName("GB18030"); RoleMap[1] = codec->toUnicode("冰结师"); RoleMap[2] = codec->toUnicode("黒魔后"); RoleMap[3] = codec->toUnicode("天帝"); RoleMap[4] = codec->toUnicode("流浪武士"); RoleMap[5] = codec->toUnicode("狂虎帝"); RoleMap[6] = codec->toUnicode("武极"); RoleMap[7] = codec->toUnicode("大魔导师"); RoleMap[8] = codec->toUnicode("天启者"); RoleMap[9] = codec->toUnicode("忍者"); RoleMap[10] = codec->toUnicode("黑暗武士"); RoleMap[11] = codec->toUnicode("缔造者"); RoleTypeMap[1] = codec->toUnicode("男魔法师"); RoleTypeMap[2] = codec->toUnicode("守护者"); RoleTypeMap[3] = codec->toUnicode("男鬼剑"); RoleTypeMap[4] = codec->toUnicode("女鬼剑"); RoleTypeMap[5] = codec->toUnicode("男格斗"); RoleTypeMap[6] = codec->toUnicode("女格斗"); RoleTypeMap[7] = codec->toUnicode("女魔法"); RoleTypeMap[8] = codec->toUnicode("圣职者"); RoleTypeMap[9] = codec->toUnicode("暗夜使者"); RoleTypeMap[10] = codec->toUnicode("缔造者"); //---调用初始化数据函数 InitTableData(); } void ModelWidget::InitTableData() { //---解决中文乱码 QTextCodec *codec = QTextCodec::codecForName("GB18030"); header << codec->toUnicode("角色") << codec->toUnicode("角色类型") << codec->toUnicode("能否转职"); Role << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8 << 9 << 10<<11; RoleType << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8 << 9 << 10<<11; RoleList << codec->toUnicode("是") << codec->toUnicode("是") << codec->toUnicode("是")<< codec->toUnicode("是") << codec->toUnicode("是")<< codec->toUnicode("是") << codec->toUnicode("是")<< codec->toUnicode("是") << codec->toUnicode("是")<< codec->toUnicode("否") <<codec->toUnicode("否"); } /* 这里,将模型的列数固定为3, 直接返回3即可 */ int ModelWidget::columnCount(const QModelIndex &parent/*=QModelIndex()*/) const { return 3; } /* 这里是返回模型的行数 */ int ModelWidget::rowCount(const QModelIndex &parent/*=QModelIndex()*/) const { return Role.size(); } /* data函数返回指定索引的数据 */ QVariant ModelWidget::data(const QModelIndex &index, int iRole) const { //----索引不为空 if (!index.isValid()) { return QVariant(); } //---在不同的情况下显示不同的数据 if (iRole == Qt :: DisplayRole) { switch (index.column()) { case 0: return RoleMap[Role[index.row()]]; break; case 1: return RoleTypeMap[RoleType[index.row()]]; break; case 2: return RoleList[index.row()]; default: return QVariant(); break; } } return QVariant(); } /* headerData()函数返回固定的表头数据, */ QVariant ModelWidget::headerData(int section, Qt :: Orientation orientation, int iRole) const { if (iRole == Qt:: DisplayRole && orientation == Qt :: Horizontal) { return header[section]; } return QAbstractTableModel :: headerData(section, orientation, iRole); }main.cpp
#include <QtWidgets/QApplication> #include <QTableView> #include "model_widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); //---解决中文乱码 QTextCodec *codec = QTextCodec::codecForName("GB18030"); ModelWidget win; QTableView tableView; tableView.setModel(&win); tableView.resize(330, 370); tableView.setWindowTitle(codec->toUnicode("地下城职业简介")); tableView.show(); return a.exec(); }运行效果
相关文章推荐
- Qt 学习之路:模型-视图高级技术
- Qt 学习之路 2(87):模型-视图高级技术
- QT5 学习之路14---对象模型
- Qt 学习之路 2(50):自定义可编辑模型
- Qt学习之路---模型与自定义模型
- Qt 学习之路 2(45):模型
- Qt 学习之路 2(56):使用模型操作数据库
- Qt学习之路——对象模型
- Qt 学习之路 2(49):自定义只读模型 QTableView
- Qt 学习之路 :自定义只读模型
- Qt学习之路之模型/视图类
- Qt学习之路_6(Qt局域网聊天软件)
- Qt学习之路_4(Qt UDP的初步使用)
- Qt学习之路_8(Qt中与文件目录相关操作)
- Qt学习之路_7(线性布局和网格布局初步探索)
- Qt学习之路(37): Qt容器类之关联存储容器
- Qt学习之路_11(简易多文档编辑器)
- 学习之路1--QT主要的对象
- Qt学习之路_9(Qt中Item Widget初步探索)
- qt 学习之路