2017-06-12 5 views
0

QML component which embeds one C++ classでアプリケーションを設計しようとしています。 私のクラスは以下の通りです: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); 
    } 

}; 

こちらの商品は私のQMLコードに4回実施し、かつ回転させる必要があり、アニメーションやサイズ変更する必要があります。

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{/.../} 
    } 

どれ例やヘルプ: は私がupdatePaintNode()を使用する必要がありますが、設計者(少なくともないコーダー)、私はトラブル混合言語を持っているよう... アイデアは私のQMLコードで持つことだと思います私のオブジェクトをQMLアプリケーションに実装する方法については、多くの助けになります!

答えて

0

あなたがあなた自身のQMLのアイテムを実装するには、少なくとも3つの方法を持っている(から注文より速くより遅く)。

  1. [C++] QQuickItemから派生したクラスを作成し、 QQuickItem::updatePaintNode()
  2. を上書きし、[C++] QQuickPaintedItemから派生したクラスを作成し、 QQuickPaintedItem::paint()
  3. を上書き[QML]ジェレミーMrgtの答え@キャンバスベースの項目(参照を作成します。 )
+0

2つの質問があります: 1)QQuickItemクラスがQQuickPaintedItemクラスより高速なのはなぜですか?最後の子は最初の子の子ですか? 2)もちろんC++コードを使用するつもりですが、QMLコードでどのように使用しますか? Ps:私はこのフォーラムでは新しいよ私はコメント部分で質問する必要があるかどうか分からない、もし私がすべきでないならごめんなさい! – TaiZzZ

+0

第1の方法はOpenGLを使い、第2の方法はQPainterを使います。最初にアイテムはQPainterを使用してペイントされ、このイメージはシーングラフにOpenGLテクスチャとしてペイントされます。例は、[ここ](https://stackoverflow.com/documentation/qml/6509/creating-custom-elements-in-c/22330/creating-custom-elements-in-c#t=201706131403549080664)にあります。 – folibis

0

キャンバス - http://doc.qt.io/qt-5/qtquick-canvas-example.htmlを使用すると、小さくてきれいなコードが得られます。

あなたはFleche.qmlと呼ばれる新しいコンポーネントを作成し、あなたが好きな場所にそれを使用することができます(アニメーションやサイズ変更、回転、...)

+0

残念なことに、残念ながら、それはgreedierですので、小さくて清潔です!あるいは、私は組み込み機器用のHCIを開発しています。私はavalaibleなパワーをほとんど持っておらず、それを必要とするJavascript(QML)コードを避けています。しかし、私がキャンバスアイテムを使うことができたら、私は信じています。しかし、この例にお答えいただきありがとうございます! – TaiZzZ

関連する問題