2016-05-16 4 views
7

私の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側で何とかガベージコレクションされているのでしょうか?

答えて

5

QMLサイドガベージは、QMLに手渡した後にオブジェクトを収集するという問題がありました。その理由は、このQObjectを親に設定したことがないからです。

関連する問題