QT自定义TableModel

来源:互联网 发布:战舰少女r日服 知乎 编辑:程序博客网 时间:2024/05/16 09:49

1、modelex.h

#ifndef MODELEX_H#define MODELEX_H#include <QAbstractTableModel>#include <QVector>#include <QMap>#include <QStringList>class ModelEx:public QAbstractTableModel{public :        //构造函数        ModelEx(QObject *parent=0);        //行数        virtual int rowCount(const QModelIndex &parent) const;        //列数        virtual int columnCount(const QModelIndex &parent) const;        //数据对象        QVariant data(const QModelIndex &index, int role) const;        //头部数据        QVariant headerData(int section, Qt::Orientation orientation, int role) const;private :        QVector<short> army;        QVector<short> weaponType;        QMap<short,QString> armyMap;        QMap<short,QString> weaponTypeMap;        QStringList weapon;        QStringList header;        void populateModel();};#endif // MODELEX_H


2、modelex.cpp

#include "modelex.h"ModelEx::ModelEx(QObject *parent)    :QAbstractTableModel(parent){    armyMap[1]=tr("空军");    armyMap[2]=tr("海军");    armyMap[3]=tr("陆军");    armyMap[4]=tr("海军陆战队");    weaponTypeMap[1]=tr("轰炸机");    weaponTypeMap[2]=tr("战斗机");    weaponTypeMap[3]=tr("航空母舰");    weaponTypeMap[4]=tr("驱逐舰");    weaponTypeMap[5]=tr("直升机");    weaponTypeMap[6]=tr("坦克");    weaponTypeMap[7]=tr("两栖攻击舰");    weaponTypeMap[8]=tr("两栖战车");    populateModel();}void ModelEx::populateModel(){    header<<tr("军种")<<tr("种类")<<tr("武器");    army<<1<<2<<3<<4<<2<<4<<3<<1;//军种    weaponType<<1<<3<<5<<7<<4<<8<<6<<2;//武器种类    //武器    weapon<<tr("B-2")<<tr("尼来兹级")<<tr("阿帕奇")<<tr("黄蜂级")            <<tr("阿利伯克级")<<tr("AAAV")<<tr("M1A1")<<tr("F-22");}int ModelEx::columnCount(const QModelIndex &parent) const{    return 3;}int ModelEx::rowCount(const QModelIndex &parent) const{    return army.size();}QVariant ModelEx::data(const QModelIndex &index, int role) const{    if(!index.isValid())    {        return QVariant();    }    if(role==Qt::DisplayRole)    {        switch(index.column())        {        case 0:            return armyMap[army[index.row()]];            break;        case 1:            {                return weaponTypeMap[weaponType[index.row()]];                break;            }        case 2:            {                return weapon[index.row()];            }        default:            return QVariant();        }    }    return QVariant();}QVariant ModelEx::headerData(int section, Qt::Orientation orientation, int role) const{    if(role==Qt::DisplayRole && orientation==Qt::Horizontal)    {        return header[section];    }    return QAbstractTableModel::headerData(section,orientation,role);}


3、main.cpp

#include <QApplication>#include "modelex.h"#include <QTextCodec>#include <QTableView>int main(int argc,char* argv[]){    QApplication app(argc,argv);    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());    ModelEx modelex;    QTableView view;    view.setModel(&modelex);    view.setWindowTitle(QObject::tr("ModelEx"));    view.resize(500,500);    view.show();    return app.exec();}


原创粉丝点击