stringListModel.cpp
#ifndef STRINGLISTMODEL_H
#define STRINGLISTMODEL_H
#include <QAbstractListModel>
#include <QStringList>
class StringListModel : public QAbstractListModel
{
public:
StringListModel(QObject *parent):QAbstractListModel(parent){}
//對QAbstractModel 的部分純虛函數進行實現
int columnCount(const QModelIndex &parent) const;
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
private:
QStringList StringList;
};
#endif // STRINGLISTMODEL_H
stringlistmodel.cpp
#include "stringlistmodel.h"
#include <qDebug>
#include <QFont>
#include <QBrush>
#include <QPixmap>
int StringListModel::columnCount(const QModelIndex &) const
{
return 3;
}
int StringListModel::rowCount(const QModelIndex &) const
{
return 2;
}
QVariant StringListModel::data(const QModelIndex &index, int role) const
{
int row = index.row();
int column = index.column();
qDebug()<<QString("Row%1,Column%2").arg(index.row()+1).arg(index.column()+1);
switch(role){
case Qt::BackgroundRole ://背景
if(row == 0 && column == 2){
QBrush color(Qt::red);
return color;
}
if(row == 1 && column == 2){
QPixmap pix("../images/1.jpg");
return pix;
}
break;
case Qt::DisplayRole : //展示
if(row == 0 && column == 1) return QString("<---LEFT");
if(row == 1 && column == 1) return QString("RIGHT--->");
return QString("Row%1,Column%2").arg(index.row()+1).arg(index.column()+1);
break;
case Qt::FontRole : //字體
if(row == 0 && column == 0){
QFont boldFont;
boldFont.setBold(true);
return boldFont;
}
break;
case Qt::TextAlignmentRole : //對齊
if(row == 1 && column == 1){
return Qt::AlignRight + Qt::AlignVCenter;
}
break;
case Qt::CheckStateRole : //check框
if(row == 1 && column == 0){
return Qt::Checked;
}
}
return QVariant();
}
QVariant StringListModel::headerData(int section, Qt::Orientation orientation, int role) const
{
return QVariant();
}
main.h
#include "widget.h"
#include "stringlistmodel.h"
#include <QApplication>
#include <QTableView>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableView * view = new QTableView;
StringListModel * myModel = new StringListModel(0);
view->setModel(myModel);
view->resize(500,300);
view->show();
return a.exec();
}
The role parameter is used to let the model know which property is being requested.
ItemDataRole是一個枚舉變量,可以在文檔裏查到: