Библиотека Python, PyQt и C ++

Я делаю библиотеку c ++ с SIP, чтобы использовать ее в коде Python.

Моя проблема в том, что мне не удается передать объект Python QString в библиотечные функции C ++.
Каждый вызов функции C ++ с использованием QString приводит к краху 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’

Похоже, это показывает, что QString из библиотеки C ++ неправильно понимается Python.

3

Решение

В случае, если это кого-то заинтересует, я обнаружил, что проблема определенно была в том, что PyQt был предоставлен с Qt 4.9.2 (это не публичная версия), хотя моя библиотека C ++ была связана с Qt 4.6.3.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]