使用Shiboken为C++和Qt库创建Python绑定(3)

创建自定义Qt库的绑定

操作步骤和文件位置与前面非Qt的情况完全相同:

顶层CMakeLists文件和前面完全相同(此处略)。

libfoo

libfoo 中是我们原始的需要绑定的Qt 代码,可以快速一下这3个文件(与前面相比,就是多了点Qt的元素)

CMakeLists.txt project(libfoo) find_package(Qt4 COMPONENTS QtCore REQUIRED) include(${QT_USE_FILE}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(LIB_SRC foo.cpp) qt4_automoc(${LIB_SRC}) add_definitions("-DLIBFOO_BUILD") add_library(libfoo SHARED ${LIB_SRC}) target_link_libraries(libfoo ${QT_LIBRARIES}) set_target_properties(libfoo PROPERTIES OUTPUT_NAME "foo")

此处使用的是qt4_automoc方式,你也可以用qt4_wrap_cpp方式(不做解释)

foo.h #ifndef FOO_H #define FOO_H #include <QtCore/QObject> #if LIBFOO_BUILD #define LIBFOO_API Q_DECL_EXPORT #else #define LIBFOO_API Q_DECL_IMPORT #endif class LIBFOO_API Math : public QObject { Q_OBJECT public: Math(); ~Math(); int squared(int x); }; #endif // FOO_H

派生自QObject,代码整体上比前面的短,因为Q_DECL_EXPORT可以使我们避免自己根据不同平台去定义宏。

foo.cpp #include "foo.h" Math::Math() :QObject(NULL) { } Math::~Math() { } int Math::squared(int x) { return x * x; } #include "foo.moc"

注意,最后的include语句是配合cmake的qt4_automoc工作的,如果你有在qmake下使用它的经验,请注意它们截然不同。

接下来看绑定部分

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxysw.html