首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QStandardItemModel转换为QVariant

将QStandardItemModel转换为QVariant
EN

Stack Overflow用户
提问于 2011-11-26 23:57:33
回答 1查看 1.2K关注 0票数 1

我正在尝试将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派生的,所以我想它应该已经被注册了

代码语言:javascript
复制
void MyObject::someFunction(QString fileName)
{
    QVariant myObjectV = qVariantFromValue(this);
    // send to python
    ...
}

但这会给出以下错误:

'qt_metatype_id' : is not a member of 'QMetaTypeId<MyObject>'

我尝试在声明类之后注册它,但这抛出了一个不同的错误。

代码语言:javascript
复制
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");}

EN

回答 1

Stack Overflow用户

发布于 2011-11-27 00:49:34

是的,默认情况下,QVariant可以接受以下类型之一- http://doc.qt.io/qt-4.8/qvariant.html#Type-enum -它们不足以满足您的任务。你应该通过qmetatype系统自己声明额外的类型。因此,您应该调用qRegisterMetaType()函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8279649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档