私のPython3 QMLプログラムで曖昧な問題(バグ? 私は、カスタムgetメソッドを持つQAbstractListModelを実装して、基になるQObject項目に到達しました。私はQMLで2つの異なる場所で同じPythonのQObjectのを取得しようとする瞬間は私が取得:QMLのPython QObjectへのアクセスが2回目の呼び出しで変換に失敗する
@pyqtSlot(int, result=QMyItem)
def get(self, row):
return self._items[row]
そして、このようなモデル::
ComboBox {
model: mymodel
textRole: 'name'
onActivated: mymodel.item = model.get(index)
onModelChanged: currentIndex = getCurrentIndex(mymodel, mymodel.item)
}
TypeError: unable to convert a Python 'QMyItem' object to a C++ 'QObject*' instance
getメソッドは次のようになります
問題は実際にQObjectを取得する方法とは関係ありません。これはPythonからQMLへの変換に関するものです。あたかもコンバータがすでに渡された参照のリストを保持していて、何とか同期しなくなったかのように。
私は今、エラーを示す最小のサンプルを持っています。https://github.com/sturmf/python_samples.gitからソースを取得し、pyqt_combobox_qabstractlistmodel
フォルダに移動します。そこで、python3 main.py
でサンプルを開始します。表示されているコンボボックスでは、項目three
を選択できますが、項目one
はコンソールにエラーを表示します。その理由は、項目1が既にPythonからQMLに渡されていて、2度目には機能しないからです。
変換されたQObjectがQML側で何とかガベージコレクションされているのでしょうか?