Qt25模型-QAbstractTableModel

知识点

   //虚函数声明
    virtual int rowCount(const QModelIndex& parent =QModelIndex())const;
    virtual int columnCount(const QModelIndex& parent =QModelIndex())const;
    QVariant data(const QModelIndex& index,int role)const;
    QVariant headerData(int section,Qt::Orientation orientation,int role)const;



 view.setModel(&modelEx);设置模型

modelex

modelex.h

#ifndef MODELEX_H
#define MODELEX_H
#include <QAbstractTableModel>
#include <QVector>
#include <QMap>
#include <QStringList>


class ModelEx : public QAbstractTableModel
{
public:
    explicit ModelEx(QObject *parent = 0);
    //虚函数声明
    virtual int rowCount(const QModelIndex& parent =QModelIndex())const;
    virtual int columnCount(const QModelIndex& parent =QModelIndex())const;
    QVariant data(const QModelIndex& index,int role)const;
    QVariant headerData(int section,Qt::Orientation orientation,int role)const;
signals:

public slots:

private:
    QVector<short> army;
    QVector<short> weaponType;
    QMap<short,QString>armyMap;
    QMap<short,QString>weaponTypeMap;
    QStringList weapon;
    QStringList header;
    void populateModel();

};
#endif // MODELEX_H

modelex.cpp

#include "modelex.h"


ModelEx::ModelEx(QObject *parent):QAbstractTableModel(parent)
{
    armyMap[1] = tr("空军");
    armyMap[2] = tr("海军");
    armyMap[3] = tr("陆军");
    armyMap[4] = tr("海军和陆军");
    armyMap[5] = tr("海军和陆军2");
    weaponTypeMap[1] = tr("轰炸机");
    weaponTypeMap[2] = tr("战斗机");
    weaponTypeMap[3] = tr("坦克");
    weaponTypeMap[4] = tr("飞机");
    weaponTypeMap[5] = tr("炮弹");
    weaponTypeMap[6] = tr("舰艇");
    populateModel();

}

int ModelEx::rowCount(const QModelIndex &parent) const
{
    return army.size();
}

int ModelEx::columnCount(const QModelIndex &parent) const
{
    return 4;
}

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()];
            break;
        case 3:
            return weapon[index.row()];
            break;
        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);
}

void ModelEx::populateModel()
{
    header<<tr("军种")<<tr("种类")<<tr("武器")<<tr("武器1");
    army<<1<<2<<3<<4<<2<<4<<3<<1;
    weaponType<<1<<3<<5<<6<<2<<5<<2<<5;
    weapon<<tr("B-2")<<tr("普通")<<tr("特殊")<<tr("高级")<<tr("困难")<<tr("复杂")<<tr("困难2")<<tr("复杂2");
}



main.cpp

#include "modelex.h"
#include <QApplication>
#include <QTableView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ModelEx modelEx;
    QTableView view;
    view.setModel(&modelEx);
    view.setWindowTitle(QObject::tr("使用模型"));
    view.resize(400,400);
    view.show();
    return a.exec();
}

运行图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值