QT学习:模型练习
通過實現將數值代碼轉換為文字的模型來介紹如何使用自定義模型。此模型中保存了不同軍種的各種武器,實現效果如圖所示。
具體操作步驟如下。
(1)ModelEx類繼承自QAbstractTableModel類,頭文件“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(); }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"); }columnCount()函數中,因為模型的列固定為“3”,所以直接返回“3”。
int ModelEx::columnCount(const QModelIndex &parent) const { return 3; }rowCount()函數返回模型的行數。
int ModelEx::rowCount(const QModelIndex &parent) const {return army.size(); }data()函數返回指定索引的數據,即將數值映射為文字。
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(); }下表為主要角色及其描述:
headerData()函數返回固定的表頭數據,設置水平表頭的標題,具體代碼如下:
(3)在源文件“main.cpp”中,將模型和視圖關聯,具體代碼如下:
#include <QApplication> #include "modelex.h" #include <QTableView> int main(int argc,char *argv[]) {QApplication a(argc,argv);ModelEx modelEx;QTableView view;view.setModel(&modelEx);view.setWindowTitle(QObject::tr("modelEx"));view.resize(400,400);view.show();return a.exec(); }總結
- 上一篇: QT学习:模型/视图基本概念
- 下一篇: QT学习:视图(View)练习