我用 SIP 制作了一个 c++ 库,以便在 Python 代码中使用它。
我的问题是我无法将 python QString 对象传递给 C++ 库函数。每次使用 QString 调用 C++ 函数都会导致 Python 崩溃。执行函数时不会出现崩溃,但在开始函数的第一步之前。(所以我这里就不放cpp文件了)
这是我所做的:
C++ 类:
#include "QString"
Class CPythInteface
{
public:
CPythInteface ();
// Trying a lot of prototypes:`
bool testSET( const QString* cSource);
bool testGET( QString* Source );
bool testGET2( QString& Source );
bool testGET3( char* zBuff );
bool testGET4( QString Source );
bool testSET4( QString Source );
QString getS1( const char* zVal );
};
-
sip文件:
%Module libtest 1
%Import QtCore/QtCoremod.sip
class CPythInteface
{
%TypeHeaderCode
#include "CPythInteface.h"
%End
public:
CPythInteface ();
bool testSET( const QString* );
bool testGET( QString* );
bool testGET2( QString& );
bool testGET3( char* );
bool testGET4( QString Source );
bool testSET4( QString Source );
QString getS1( const char* zVal );
};
-
Python 用法:
>>> import libtest
>>> obj = libtest. CPythInteface()
>>> from PyQt4 import QtCore
>>> qs1 = QtCore.QString( "abc" )
>>> obj.testGET3( "azertyuiop" ) <-- OK
>>> obj.testXXX( qs1 ) <-- Crashes for all
functions SET/GET
.
难道我做错了什么 ?这不是应该使用 Python 和 C++ 的方式吗?
-
上面初始化的另一个测试:
>>> qs1 += obj.getS1( "azert" )
给出错误:
TypeError:无法连接“QString”和“ProcessError”对象
这似乎表明 Python 没有正确理解 C++ 库中的 QString。