在QML中使用QPainter

2021-09-11 22:17:59 字數 2021 閱讀 2601

要想在 qml 中進行繪圖,有很多方法,

1、在我之前的部落格中,就講過如何在 qml 中使用 opengl,這是一種方法,但它要求 opengl 的基礎。

2、一種方法是使用 qpainter,它的好處是提供很多易用和實用的繪圖 api,而且在很多在 widgets 的使用的**可以直接移到qml中來使用。

3、當然還有一種方法就是使用場景圖 api,這種我了解的不多,以後再說。

先上效果圖(因為很漂亮):

可以看到,效果很不錯,接下來我開始講解如何在 qml 中使用 qpainter 的步驟:

1、繼承自 qquickpainteditem。

2、qquickpainteditem 有乙個純虛函式 paint(

qpainter

*painter),重寫它,而引數為我們提供了乙個 qpainter,使用它來進行自己的繪圖。

#ifndef magicpool_h

#define magicpool_h

#include "magicfish.h"

#include #include class magicpool : public qquickpainteditem

public slots:

void updatevalue();

void updatemove();

void movefish(qreal x, qreal y, bool hascircle);

protected:

void paint(qpainter *painter);

private:

qreal calcincludedangle(const qpointf ¢er, const qpointf &head, const qpointf &touch);

qpointf calcpoint(const qpointf &pos, qreal length, qreal angle);

qreal getlength(const qpointf &pos1, const qpointf &pos2);

private:

bool m_moving;

bool m_startcircle;

qtimer *m_circletimer;

qtimer *m_movetimer;

qtimer *m_swimtimer;

int m_circleradius;

int m_circlealpha;

qpointf m_pos;

magicfish *m_fish;

qpainterpath m_path;

qreal m_movestep;

};#endif // magicpool_h

3、使用 qmlregistertype 註冊到 qml 中使用。

#include "magicpool.h"

4、在 qml 中匯入使用。

import qtquick 2.9

import qtquick.window 2.2

import an.utility 1.0

window

magicpool

timer

}component.oncompleted: randommove();

mousearea}}

因為這裡只講如何在 qml 使用 qpainter,而具體的繪製過程有點複雜,具體可見**。

實現來自:

原理來自:

好了,這篇其實很簡單,而且 qpainter 用起來也簡單方便,當然,在 qml 中確實也有更好的方法(也更複雜)來繪圖,但是具體喜歡哪種還是取決於個人。

然後,附上**位址,我就放在了 qmlcontrols中了:

在 QML 中使用 C 類和物件的方法

qt 提供了兩種在 qml 環境中使用 c 物件的方式 1,在 c 中實現乙個類,註冊到 qml 環境中,qml 環境中使用該型別建立物件 2,在 c 中構造乙個物件,將這個物件設定為 qml 的上下文屬性,在 qml 環境中直接使用改屬性 從 qobject 或 qobject 的派生類繼承 使用...

Qt中使用qml的方法

1.2 註冊c 類到qml中 qmlregistertype testqt 1,0,testcontrol 其中testcontrol為c 類的名稱,testqt為qml使用的資料 當qml要使用testcontrol的類時,需要包含import testqt1.0 注意 1.在qt5.12.2中,...

Qt中使用qml的方法

1.2 註冊c 類到qml中 qmlregistertype testqt 1,0,testcontrol 其中testcontrol為c 類的名稱,testqt為qml使用的資料 當qml要使用testcontrol的類時,需要包含import testqt1.0 注意 1.在qt5.12.2中,...