QT怎样将一个结构体作为函数参数从C++传递到QML
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT怎样将一个结构体作为函数参数从C++传递到QML相关的知识,希望对你有一定的参考价值。
参考技术A 不太好传, 除非是QT标准的数据结构, 一开始我也纠结这个, 后面直接传JSON对象就好了。 结构体就算了把, QML不支持本回答被提问者采纳从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?
【中文标题】从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?【英文标题】:How to pass C++ classes as arguments when calling python functions from C++? 【发布时间】:2014-12-07 23:33:02 【问题描述】:我正在编写一个需要加载 Python 模块并调用该模块中的函数的 C++ 应用程序。 应用程序需要将 C++ 分类作为参数传递给 python 函数。 我设法从 C++ 代码中调用 python 代码,但我只设法将“原始”类型作为参数传递。
我使用 SWIG 创建包装器/接口,但我找不到如何将我的 C++ 类从应用程序转换为 PyObject* 以便将其作为参数传递给 python 函数。
您知道我在哪里可以找到有关如何执行从 C++ 转换为 PyObject* 的信息吗?
【问题讨论】:
【参考方案1】:Boost 有一个 Python 接口库,可能对你有帮助。
check it out
heres the documentation on functions
【讨论】:
【参考方案2】:我仍然没有解决方案,我只有以下解决方法: 1. 我从实例创建一个 PyObject,并将它传递给 python 函数。 2. python 代码,使用 SWIG 生成的库中的一个函数,将 PyObject 转换为该类的 python 版本。
实现:
在 C++ 文件中
MyClass myObject;
...
PyObject *parameterForPython = PyCObject_FromVoidPtr(&myObject, NULL); // step 1
PyTuple_SetItem(pyArgs, 0, parameterForPython);
PyObject_CallObject(pythonFunctionObject, pyArgs);
在 swig 接口文件中(步骤 2 的代码):
%inline %
MyClass *convertPyObjectToMyClass(PyObject * ptr)
return (MyClass *)PyCObject_AsVoidPtr(ptr)
%
在python模块中:
def myPythonFunction(ptr):
myObject = cppmodule.convertPyObjectToMyClass(ptr) #step 2
【讨论】:
【参考方案3】:您考虑过使用SWIG_NewPointerObj(ptr, type, flags)
或SWIG_ConvertPtr(obj, pptr, type, flags)
吗?
您可以通过运行获得这些声明:
swig -python -external-runtime swig-python.h
【讨论】:
以上是关于QT怎样将一个结构体作为函数参数从C++传递到QML的主要内容,如果未能解决你的问题,请参考以下文章
疑问C++结构体(数组)指针作为函数参数,会不会修改实参的值?