class QMLPtrAbstractItem
: public QObject{
Q_OBJECT
public:
virtual ~QMLPtrAbstractItem() { }
virtual bool setData
(int role,
const QVariant &value
) = 0;
virtual QVariant getData
(int role
) const = 0;
virtual int getUID() const = 0;
virtual void setUID(int uid) = 0;
};
class EmpData : public QMLPtrAbstractItem
{
Q_OBJECT
public:
enum EmpRoles {
Name = Qt::UserRole + 1,
UID,
Qualification
};
static QHash<int, QByteArray> getQMLRoles(){
QHash<int, QByteArray> roles;
roles[Name] = "name";
roles[UID] = "uid";
roles[Qualification] = "qualification";
return roles;
}
EmpData() {}
virtual QVariant getData
(int role
) const { if (role == Name)
return getName();
else if (role == UID)
return getUID();
else if (role == Qualification)
return getQualification();
}
virtual bool setData
(int role,
const QVariant &value
) { bool changed = false;
if (role == Name){
changed = true;
setName(value.toString());
}
else if (role == UID){
changed = true;
setUID(value.toInt());
}
else if (role == Qualification){
changed = true;
setQualification(value.toString());
}
return changed;
}
private:
.....
};
class TaskData : public QMLPtrAbstractItem
{
Q_OBJECT
public:
enum TaskRoles {
UID = Qt::UserRole + 1,
Name,
BgColor1,
BgColor2,
XPos,
YPos,
Length,
CreationUser,
OrderType,
Active,
Index
};
static QHash<int, QByteArray> getQMLRoles(){
QHash<int, QByteArray> roles;
roles[UID] = "uid";
roles[Name] = "name";
roles[BgColor1] = "bgColor1";
roles[BgColor2] = "bgColor2";
roles[XPos] = "xPos";
roles[YPos] = "yPos";
roles[Length] = "length";
roles[CreationUser] = "creationuser";
roles[OrderType] = "orderType";
roles[Active] = "active";
roles[Index] = "index";
return roles;
}
TaskData() {
_bgcolor1 = "#FEFEFE";
_bgcolor2 = "#ededeb";
_active = false;
}
virtual ~TaskData() { }
.....
if (role == UID)
return getUID();
else if (role == Name)
return getName();
else if (role == BgColor1)
return getBgColor1();
else if (role == BgColor2)
return getBgColor2();
else if (role == XPos)
return getXPos();
else if (role == YPos)
return getYPos();
else if (role == Length)
return getLength();
else if (role == CreationUser)
return getCreationUser();
else if (role == OrderType)
return getOrderType();
else if (role == Active)
return isActive();
else if (role == Index)
return getIndex();
}
bool setData
(int role,
const QVariant &value
) { bool changed = false;
if (role == UID){
changed = true;
setUID(value.toInt());
}
else if (role == Name){
changed = true;
setName(value.toString());
}
else if (role == BgColor1){
changed = true;
setBgColor1(value.toString());
}
else if (role == BgColor2){
changed = true;
setBgColor2(value.toString());
}
else if (role == XPos){
changed = true;
setXPos(value.toInt());
}
else if (role == YPos){
changed = true;
setYPos(value.toInt());
}
else if (role == Length){
changed = true;
setLength(value.toInt());
}
else if (role == CreationUser){
changed = true;
setCreationUser(value.toInt());
}
else if (role == OrderType){
changed = true;
setOrderType(value.toInt());
}
else if (role == Active){
changed = true;
setActive(value.toInt());
}
else if (role == Index){
changed = true;
setIndex(value.toInt());
}
return changed;
}
private:
....
};
class OrderData : public TaskData
{
Q_OBJECT
....
}
class EventData : public TaskData
{
Q_OBJECT
...
}
{
Q_OBJECT
....
}
{
if (index.row() < 0 || index.row() > lst.size())
const QMLPtrAbstractItem * const ptrItem = lst[index.row()];
return ptrItem->getData(role);
}
bool QMLPtrNotificationModel
::setData(const QModelIndex &index,
const QVariant &value,
int role
) {
if (index.row() >= 0 && index.row() < lst.size()) {
QMLPtrAbstractItem * const ptrItem = lst.at(index.row());
if(ptrItem){
bool changed = ptrItem->setData(role, value);
if(changed)
emit dataChanged(index, index);
return changed;
}
return false;
}else
qDebug() << "QMLPtrNotificationModel::setData( " << role << ")";
return false;
}