No Icons in TreeView
-
Hi everybody
I'm trying to make a my own model to be used in a treeview and i'd like to have icons on my items.
in my model i've implemented the data function as@
QVariant PipeDesignItemModel::data(const QModelIndex &index, int role) const
{if (!index.isValid()) return QVariant(); if (role != Qt::DisplayRole) return QVariant(); QObject * Item ; Item = static_cast<QObject*>(index.internalPointer()); QVariant retObj; QString iconfile = "c:/GreenPipe.ico"; QIcon icon = QIcon(iconfile); qDebug() << icon.isNull() ; if (role == Qt::DecorationRole) retObj.setValue( QIcon(iconfile)); retObj.setValue(Item->objectName()); return retObj;
}
@However the role is never Qt::DecorationRole so the icon is never shown. What do i have to do to change the role?
-
This role never reaches your if:
@
QVariant PipeDesignItemModel::data(const QModelIndex &index, int role) const
{if (!index.isValid()) return QVariant(); if (role != Qt::DisplayRole) // here you return if item role is decoration :-) return QVariant(); // .... if (role == Qt::DecorationRole) retObj.setValue( QIcon(iconfile)); retObj.setValue(Item->objectName()); return retObj;
}
@ -
Whoops.
You don't want to know how much time i've used at this.
thanx. -
I fixed it and the icon now shows. But not the text.
@
QVariant PipeDesignItemModel::data(const QModelIndex &index, int role) const
{if (!index.isValid()) return QVariant(); if (index.column()==1 && role != Qt::DisplayRole) return QVariant(); if (index.column()==0 && role != Qt::DecorationRole) return QVariant(); QObject * Item ; Item = static_cast<QObject*>(index.internalPointer()); QVariant retObj; retObj.setValue(Item->objectName()); if (role == Qt::DecorationRole) retObj.setValue(greenPipe); return retObj;
}
@Can i show an icon and text at the same time?
-
you are showing them in different columns.
what is your view?
typically, the roles are used in the same column:@
QVariant PipeDesignItemModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();QObject* Item = static_cast<QObject*>(index.internalPointer()); QVariant retObj; switch(role) { case Qt::DisplayRole: retObj.setValue(Item->objectName()); break; case Qt::DecorationRole: retObj.setValue(greenPipe); break; } return retObj;
}@
this would show icon and text in each column. if you want to seperate by column, do it aditionally...
-
Oh, i thought QVariant could hold more than one valuetype and that all the types needed would have to be returned. But i understand now that data is called for every role.
Thanks.
-
The icon is not in a separate column. So you have the text and the icon in column 0 (and probably more texts in more columns).
-
Can somebody tell me how to resize the icon? I don't get it...