Я пытаюсь разработать приложение на Компонент QML, который встраивает один класс C ++.
Мой класс следующий:
class Fleche : public QQuickPaintedItem // Fleche = arrow
{
public :
Fleche();
~Fleche();
protected :
QPainterPath arrow;
private :
void paint(QPainter *painter){
// Draw
arrow.moveTo(50,50);
arrow.lineTo(0,0);
arrow.cubicTo(20,100/3,20,2*100/3,0,100);
arrow.closeSubpath();
// Paint
QLinearGradient gradient(0, 0, 0, 100);
gradient.setColorAt(0.0, Qt::white);
gradient.setColorAt(1.0, Qt::darkBlue);
QBrush fill(gradient);
painter->setBrush(fill);
painter->setRenderHint(QPainter::Antialiasing);
painter->drawPath(arrow);
}
};
Этот элемент должен быть реализован 4 раза в моем коде QML, и его необходимо поворачивать, анимировать и изменять размер.
Я думаю, я должен использовать updatePaintNode () но, как дизайнер (по крайней мере, не кодер), я испытываю трудности при смешивании языков …
Идея состоит в том, чтобы иметь в моем коде QML:
Fleche {
id : arrowNumberX // X is from 0 to 3
width : 0.1 * parent.width
height : 0.15 * parent.height
z : 1
rotation : X * 90
MouseArea{ /.../}
SequentialAnimation{/.../}
}
Любой пример или помощь о том, как реализовать мой объект в моем приложении QML, очень мне поможет!
У вас есть как минимум 3 способа реализовать свой собственный элемент QML (упорядоченный от быстрого к медленному).
QQuickItem
и переопределитьQQuickPaintedItem
и переопределитьЛучшая идея для этого, это использовать Canvas — http://doc.qt.io/qt-5/qtquick-canvas-example.html, Вы получите меньший и чистый код.
Вы можете создать новый компонент с именем Fleche.qml и использовать его где угодно (повернутый, анимированный и изменяющий размер, …)