重写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 }

 

posted @ 2016-05-14 22:49  aloog  阅读(2233)  评论(0编辑  收藏  举报