QStandardItemModel 派生オブジェクトを PythonQt に送信しようとしていますが、どのように送信する必要があるかについて少し混乱しています。boost::python を使用していたとき、boost::noncopyable のようないくつかのコントロールを使用して、このオブジェクトを再作成するのではなく、Python と共有していることを確認しました。また、python 内から python へのブースト共有ポインターを提供するための構造もありました。
class Scene : public boost::enable_shared_from_this<Scene>, public QStandardItemModel
ただし、PythonQt では、何が利用できるのかわかりません。この関数call
は、すべての関数パラメーターに対して QVariantList を取ります。
QVariant PythonQt::call(PyObject* object, const QString &callable, const QVariantList &args = QVariantList))
私が今混乱しているのは、QVariant を介してオブジェクトを python に取得する方法です。QStandardItemModel から派生したので、既に登録されていると思いました
void MyObject::someFunction(QString fileName)
{
QVariant myObjectV = qVariantFromValue(this);
// send to python
...
}
しかし、これにより次のエラーが発生します。
'qt_metatype_id' : is not a member of 'QMetaTypeId<MyObject>'
クラスを宣言した後に登録しようとしましたが、これは別のエラーをスローします。
class MyObject : public QStandardItemModel
{
Q_OBJECT
...
};
Q_DECLARE_METATYPE(MyObject)
QStandardItemModel::QStandardItemModel(const QStandardItemModel&) is private within this context.
Q_DECLARE_METATYPE を追加するヘッダーと、常に QStandardItemModel から派生するがそれ以外は無関係なクラスを持つ別のヘッダーで、実際に 2 回エラーが発生します。
Q_DECLARE_METATYPE は、このオブジェクトを QVariant に変換する正しい方法ですか?
BOOST_PYTHON_MODULE(シーン) { class_("シーン"); }