我正在尝试将QStandardItemModel派生的对象发送到PythonQt,但我对如何发送它感到有点困惑。当我使用boost::python时,我有几个控件,比如boost::不可复制,以确保我不是在重新创建这个对象,而是与python共享它。我还构建了一个从python内部提供到python的boost共享指针。
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. 我实际上收到了两次错误--一次是在header中添加Q_DECLARE_METATYPE,另一次是在另一个header中,它有一个总是从QStandardItemModel派生的类,但在其他方面是无关的。
将此对象转换为QVariant时,Q_DECLARE_METATYPE是正确的方法吗?
场景(BOOST_PYTHON_MODULE){ class_("Scene");}
发布于 2011-11-27 00:49:34
是的,默认情况下,QVariant可以接受以下类型之一- http://doc.qt.io/qt-4.8/qvariant.html#Type-enum -它们不足以满足您的任务。你应该通过qmetatype系统自己声明额外的类型。因此,您应该调用qRegisterMetaType()函数。
https://stackoverflow.com/questions/8279649
复制相似问题