QMLモジュールを作成するには、「バックエンド」という意味のPythonを使用します。基本的には、QMLを使用して、コンポーネントの外観を定義し、Pythonクラスで特定の動作を実装する必要があります。これはこのQMLタイプを拡張し、想像力ではQMLコンポーネントにリンク可能でなければなりません。Qt5/PyQt5:QMLフロントエンドとPythonバックエンドを持つカスタムQMLコンポーネント
私はPythonでカスタムクラスを作成し、qmlRegisterTypeでQMLで使用できるようにする方法を理解しています。これは、これまでに動作しますが、その後、すべての描画がクラス自体に実装されるようにしている - 無QML
(基本的に、私がしたいこと、それはKV-言語にkivyで行われている方法にsimliarです)小さな例:
は、私はこのような単純なColorPickerのウィジェットを実装:
class ColorWheel(QLabel):
radius = 0
color_changed = pyqtSignal(float, float)
def __init__(self, width, height):
super().__init__()
pixmap = QPixmap("colorwheel.png").scaled(width, height)
self.setFixedSize(width, height)
self.setPixmap(pixmap)
self.radius = width/2
def mouseReleaseEvent(self, event):
# {...} get mouse position, calc polar corrdinates (omitted)
# emit signal: new color was selected
self.color_changed.emit(r, angle)
def get_polar(self, x, y):
# {...} calculate polar coordinates for HSV color space (omitted)
return r, theta
今、私はこのようなQMLファイルColorWheel.qmlにGUIコード(ピックスマップ描画など)を移動したいです:
私はこのような何かをしたいメインQMLファイルmain.qmlでimport QtQuick 2.0
Item {
Image {
id: img
anchors.fill: parent
source: "./colorwheel.png"
}
}
:
import QtQuick 2.2
import ColorWheel 1.0
ApplicationWindow {
title: qsTr("Test Invoke")
width: 500
height: 400
ColorWheel {
radius: 200
}
}
これはさえ可能ですか? QtとpyQtのドキュメントでこれについて何も見つかりませんでした。常にC++クラスをQMLや他の方法で利用できるようにすることです。
誰かが正しい方向に向いていますか?
多くの感謝!
あなたのソリューションは、私が探していたまさにです。ファイルやクラスの名前の関係を理解するのに時間がかかりましたが、今はそれが理にかなっています。ありがとうございました! – Spritkopf