Люди, у кого есть
практический опыт привязки своих классов, которые унаследованы от классов Qt, к Python?
Задача: осуществить привязку без переписывания кода (максимум можно дописывать) в Windows (потом будет пересобираться под линукс). Уже неделю бьюсь на этим.
Использую PySide и утилиту Shiboken с ним в комплекте. Делаю по двум примерам
http://lynxline.com/superhybrids-part-2-now-qt-pyside/http://qt-project.org/wiki/PySide_Binding_Generation_Tutorial:_Module_5_Building_the_generatorПо ним получилось:
global.hC++ (Qt)
#undef QT_NO_STL
#undef QT_NO_STL_WCHAR
#ifndef NULL
#define NULL 0
#endif
#include "c:/Python27/Lib/site-packages/PySide/pyside_global.h"
#include "d:/___work/graphic_creator/src/const.h"
#include "d:/___work/graphic_creator/src/dev_baseitem.h"
#include "d:/___work/graphic_creator/src/dev_scene.h"
#include "d:/___work/graphic_creator/src/dev_block.h"
#include "d:/___work/graphic_creator/src/dev_wire.h"
#include "d:/QtSDK/Desktop/Qt/4.8.1/mingw/include/QtCore/QObject"
#include "d:/QtSDK/Desktop/Qt/4.8.1/mingw/include/QtCore/QObjectData"
#include "d:/QtSDK/Desktop/Qt/4.8.1/mingw/include/QtGui/QGraphicsItem"
typesystem.xmlXML
<?xml version="1.0"?>
<typesystem package="DevPython">
<load-typesystem name="typesystem_core.xml" generate="no"/>
<load-typesystem name="typesystem_gui.xml" generate="no"/>
<load-typesystem name="typesystem_xml.xml" generate="no"/>
<object-type name="DevBaseItem" />
<object-type name="DevBlock" />
<object-type name="DevWire" />
<object-type name="DevScene" />
</typesystem>
run.batDOS
c:\Python27\Lib\site-packages\PySide\shiboken.exe global.h --include-paths="d:/___work/graphic_creator/src";"d:/QtSDK/Desktop/Qt/4.8.1/mingw/include/Qt";"d:/QtSDK/Desktop/Qt/4.8.1/mingw/include/QtCore";"d:/QtSDK/Desktop/Qt/4.8.1/mingw/include/QtGui";"d:/QtSDK/Desktop/Qt/4.8.1/mingw/include/QtXml";"d:/QtSDK/Desktop/Qt/4.8.1/mingw/include/QtXmlPatterns" --typesystem-paths="c:/Python27/Lib/site-packages/PySide/typesystems" --enable-pyside-extensions --output-directory=. typesystem.xml
Сами классы
dev_baseitem.hC++ (Qt)
#include <const.h>
#include <QObject>
class DevBaseItem : public QObject
{
//....
}
dev_block.hC++ (Qt)
#include "dev_baseitem.h"
#include <QGraphicsRectItem>
class DevBlock : public DevBaseItem , public QGraphicsRectItem
{
//....
}
dev_wire.hC++ (Qt)
#include <const.h>
#include "dev_baseitem.h"
#include <QGraphicsPathItem>
class DevWire : public DevBaseItem , public QGraphicsPathItem
{
//....
}
dev_scene.hC++ (Qt)
#include <QGraphicsScene>
class DevBlock;
class DevWire;
class DevBaseItem;
class DevScene : public QGraphicsScene
{
//....
}
Результат выполнения run.bat
Generating class model... [WARNING]
enum 'QGraphicsItem::PanelModality' does not have a type entry or is not an enum
Generating namespace model... [OK]
Resolving typedefs... [OK]
Fixing class inheritance... [OK]
Detecting inconsistencies in class model... [OK]
[OK]
## куча проблем с enum
signature 'metaObject()const' for function modification in 'QObject' not found. Possible candidates:
Done, 886 warnings (31 known issues)
Кто-нибудь сталкивался с подобными проблемами?
Или может посоветуете альтернативный вариант решения поставленной задачи!