Расширение Python SIP для Qt C ++: как обработать аргумент сигнала QVector

Я новичок в Python / SIP и мне нужно создать привязку Python для библиотеки Qt / C ++, используя ее.

Заголовок класса выглядит так:

class MyClass : public QObject {
Q_OBJECT
...
signals:
void message(QString msg);
void data(QVector<quint16> *data);
...
};

Это соответствующий файл спецификации SIP:

%Module myclassPy
%Import QtCore/QtCoremod.sip

class MyClass : public QObject
{
%TypeHeaderCode
#include "myclass.h"%End
...
signals:
void message(QString msg);
void data(QVector<quint16> *data);
};

Импорт модуля Python и подключение message Сигнал к слоту Python (используя PyQt5) работает как шарм.
Тем не менее, подключение data сигнал не работает: TypeError: C++ type 'QVector<quint16>' is not supported as a signal argument type,

Поэтому мне нужно преобразовать аргумент QVector (указатель) сигнала в объект Python (возможно, список).
Каков наилучший способ сделать это с SIP?
Нужно ли указывать новый сигнал с аргументом типа Python?

Я уже пытался с помощью %MappedType QVector<quint16> определение для преобразования его в список Python, но это не сработало (та же ошибка TypeError, что и выше в Python).

Заранее спасибо.


ОБНОВЛЕНИЕ — я вроде нашел решение / обходной путь:

data(QVector<quint16> *data) сигнал заменен сигналом без аргумента, например, dataAvailable(), Тогда публичный метод, как QVector<quint16> *getData() добавлен для передачи данных. %MappedType QVector<quint16> определение сохраняется (как я уже пробовал раньше) и преобразует возвращаемый тип в Python PyObject *, Тем не менее, это работает с возвращаемым значением getData() метод, но не с аргументами сигнала.

В Python просто подключите сигнал dataAvailable() в слот и позвонить getData() из этого слота.

Поэтому данные должны быть буферизованы где-то в пределах MyClass,

1

Решение

Задача ещё не решена.

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

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

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