我试图在QML component which embeds one C++ class上设计一个应用程序。 我的课程如下:
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);
}
};
这个项目应该在我的QML代码中实现4次,需要旋转,动画和调整大小。 我想我必须使用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应用程序中实现我的对象的任何示例或帮助都会对我有所帮助!
答案 0 :(得分:0)
更好的想法是,使用Canvas - http://doc.qt.io/qt-5/qtquick-canvas-example.html,您将获得更小更清晰的代码。
你可以创建一个名为Fleche.qml的新组件,并在任何你想要的地方使用它(旋转,动画和可调整大小......)
答案 1 :(得分:0)
您至少有3种方法可以实现自己的QML项目(从更快到更慢排序)。
QQuickItem
的类并覆盖
QQuickItem::updatePaintNode() QQuickPaintedItem
的类并覆盖
QQuickPaintedItem::paint()