如何解决将pyqt对象传递到swig导出的c ++代码
|| 有谁知道是否存在将pyQt对象传递给C ++代码的方法? 我会更好地解释;说我有这个C ++代码 void QtGuiPDLVisitor::set_layout(QLayout* _layout){
layout = _layout;
}
其中QtGuiPDLVisitor是使用SWIG在python中导出的c ++类,所以在python中我想做这样的事情
layout = QtGui.QGridLayout()
visitor = QtGuiPDLVisitor()
visitor.set_layout(layout)
可能吗? python解释器说不:(...是否有任何解决方法,例如传递指针或任何其他hack的方法?
编辑:
Traceback (most recent call last):
File \"/home/picci/workspace/gestface/pypelab/src/pypelab/ui/pipeworkarea.py\",line 53,in create_new_computation
subWindowWidget.setComputation(idx.data())
File \"/home/picci/workspace/gestface/pypelab/src/pypelab/ui/pypeWidgets.py\",line 44,in setComputation
self.widBuilder.buildUi(self)
File \"/home/picci/workspace/gestface/pypelab/src/pypelab/ui/pypeWidgets.py\",line 63,in buildUi
pdlVisitor.set_layout(criteria_area_layout)
File \"/home/picci/workspace/gestface/pipeit/wrap/python/dist/Debug/pipeit.py\",line 736,in set_layout
def set_layout(self,*args) -> \"void\" : return _pipeit.QtGuiPDLVisitor_set_layout(self,*args)
TypeError: in method \'QtGuiPDLVisitor_set_layout\',argument 2 of type \'QLayout *\'
这是来自python的错误。我已经知道这个错误是由于Qt4是使用SIP在python中进行包装的事实,而我正在使用SWIG进行包装,但是我认为必须有一种直接访问Qlayout对象的指针和从python传递给C ++代码。
解决方法
好的,我实际上找到了一种方法。我用了
visitor.set_layout_address(sip.unwrapinstance(layout))
从python,比在c ++
void QtGuiPDLVisitor::set_layout_address(long _layout_address){
layout = reinterpret_cast<QLayout*>(_layout_address);
}
和工作!
这里sip doc有关sip.unwrapinstance()的更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。