awhite1159
21st June 2008, 23:33
I am using the QAbstractItemModel and below is the implementation of the data function. I would like to keep my current data structure separate and intact so that is why I chose the abstract rather than the standard. The problem I am having is that I am not sure if I am re-inventing the wheel. Does this code seem unusual and unnecessary? Would I have an easier time using the QStandardItemModel along with a subclassed QStandardItem?
(BUS is a namespace where I defined the icon type ids. I also created a member in my BUSDataMover object that stores the icon type which can be obtained with getIconType())
QVariant TreeModel::data(const QModelIndex &index, int role) const {
if(!index.isValid())
return QVariant();
BUSDataMover* item;
switch(role) {
case Qt::DisplayRole:
item = static_cast<BUSDataMover*>(index.internalPointer());
return item->data(index.column());
break;
case Qt::DecorationRole:
item = static_cast<BUSDataMover*>(index.internalPointer());
if(index.column() != 0)
return QVariant();
switch(item->getIconType()) {
case BUS::NetworkIcon:
return QIcon(":/images/network.png");
break;
case BUS::ClientIcon:
return QIcon(":images/client.png");
break;
case BUS::ServerIcon:
return QIcon(":images/server.png");
break;
case BUS::NICIcon:
return QIcon(":images/nic.png");
default:
return QIcon(":/images/unknown.png");
}
break;
default:
return QVariant();
}
}
(BUS is a namespace where I defined the icon type ids. I also created a member in my BUSDataMover object that stores the icon type which can be obtained with getIconType())
QVariant TreeModel::data(const QModelIndex &index, int role) const {
if(!index.isValid())
return QVariant();
BUSDataMover* item;
switch(role) {
case Qt::DisplayRole:
item = static_cast<BUSDataMover*>(index.internalPointer());
return item->data(index.column());
break;
case Qt::DecorationRole:
item = static_cast<BUSDataMover*>(index.internalPointer());
if(index.column() != 0)
return QVariant();
switch(item->getIconType()) {
case BUS::NetworkIcon:
return QIcon(":/images/network.png");
break;
case BUS::ClientIcon:
return QIcon(":images/client.png");
break;
case BUS::ServerIcon:
return QIcon(":images/server.png");
break;
case BUS::NICIcon:
return QIcon(":images/nic.png");
default:
return QIcon(":/images/unknown.png");
}
break;
default:
return QVariant();
}
}