簡體   English   中英

如何在 QML 組件中使用 C++ 類

[英]How to use a C++ class in a QML component

我正在嘗試在嵌入一​​個 C++ 類QML 組件上設計一個應用程序。 我的課程如下:

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 應用程序中實現我的對象的任何示例或幫助都會對我有很大幫助!

更好的主意是使用 Canvas - http://doc.qt.io/qt-5/qtquick-canvas-example.html ,您將獲得更小更干凈的代碼。

您可以創建名為 Fleche.qml 的新組件,並在您想要的任何地方使用它(旋轉、動畫和可調整大小,...)

您至少有 3 種方法來實現您自己的 QML 項目(從快到慢排序)。

  1. [C++] 創建派生自QQuickItem類並覆蓋QQuickItem::updatePaintNode()
  2. [C++] 創建派生自QQuickPaintedItem類並覆蓋QQuickPaintedItem::paint()
  3. [QML] 創建基於 Canvas 的項目(請參閱 @Jérémy Mrgt 的回答)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM