3

我用 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。

4

1 回答 1

2

如果有人对此感兴趣,我发现问题肯定是因为 PyQt 提供了 Qt 4.9.2(这不是公共版本),尽管我的 C++ 库链接了 Qt 4.6.3。

于 2013-05-28T12:45:42.183 回答