重写QStandardItemModel的data函数实现值替换
1 replacemodel.h 2 #ifndef REPLACEMODEL_H 3 #define REPLACEMODEL_H 4 5 #include <QStandardItemModel> 6 7 class ReplaceModel : public QStandardItemModel 8 { 9 Q_OBJECT 10 public: 11 enum SubjectItem 12 { 13 MATH = 0, 14 ENGLISH, 15 CHINESE, 16 }; 17 18 explicit ReplaceModel(QObject *parent = 0); 19 20 signals: 21 22 public slots: 23 24 // QAbstractItemModel interface 25 public: 26 QVariant data(const QModelIndex &index, int role) const; 27 }; 28 29 #endif // REPLACEMODEL_H 30 31 replacemodel.cpp 32 #include "replacemodel.h" 33 34 ReplaceModel::ReplaceModel(QObject *parent) : QStandardItemModel(parent) 35 { 36 37 } 38 39 QVariant ReplaceModel::data(const QModelIndex &index, int role) const 40 { 41 QVariant value = QStandardItemModel::data(index, role); 42 if(role == Qt::DisplayRole) 43 { 44 int subject = index.data(Qt::EditRole).toInt(); 45 QString replaceVal; 46 switch(subject) 47 { 48 case MATH: 49 replaceVal = "数学"; 50 break; 51 case ENGLISH: 52 replaceVal = "英语"; 53 break; 54 case CHINESE: 55 replaceVal = "语文"; 56 break; 57 default: 58 replaceVal = "体育"; 59 break; 60 } 61 value = QVariant(replaceVal); 62 } 63 return value; 64 } 65 66 main.cpp 67 #include <QApplication> 68 #include <QTableView> 69 #include "replacemodel.h" 70 71 int main(int argc, char *argv[]) 72 { 73 QApplication app(argc, argv); 74 75 QTableView tableView; 76 ReplaceModel *model = new ReplaceModel; 77 model->setHorizontalHeaderLabels(QStringList() << "学科"); 78 79 //语文 80 QStandardItem *chinese = new QStandardItem(QString::number(ReplaceModel::CHINESE)); 81 model->appendRow(chinese); 82 83 //数学 84 QStandardItem *math = new QStandardItem(QString::number(ReplaceModel::MATH)); 85 model->appendRow(math); 86 87 tableView.setModel(model); 88 tableView.show(); 89 90 return app.exec(); 91 }