Я пытаюсь отправить производный от 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))
Что меня сейчас смущает, так это как я могу доставить мой объект в python через QVariant.Так как он получен из 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, но в остальном не связан.
Является ли Q_DECLARE_METATYPE правильным способом преобразования этого объекта в QVariant?
BOOST_PYTHON_MODULE (сцена) {класс _ ("сцена");}