Получите из QDeclarativeItem
и переопределите paint
метод. Зарегистрируйте этот новый компонент с помощью qmlRegisterType
и используйте его внутри своего делегата.
Не забудьте снять флажок QGraphicsItem::ItemHasNoContents
в элементе пользовательского компонента.
Код компонента:
class CustomItem : public QDeclarativeItem
{
Q_OBJECT
Q_PROPERTY (int radius READ radius WRITE setRadius)
public:
explicit CustomItem(QDeclarativeItem *parent = 0)
: QDeclarativeItem(parent), m_radius(0)
{
setFlag(QGraphicsItem::ItemHasNoContents, false);
}
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
void setRadius(int r);
int radius();
private:
int m_radius;
};
Код средства просмотра (внутри основного, перед настройкой источника QML):
qmlRegisterType<CustomItem>("Self", 1,0, "CustomItem");
И код QML:
import QtQuick 1.1
import Self 1.0
ListView {
model: ListModel {
ListElement { name: "One"; value: 10 }
ListElement { name: "Two"; value: 5 }
ListElement { name: "Three"; value: 15 }
}
delegate: Column {
Text {
text: name
}
CustomItem {
radius: value
}
}
}