[PyQt] [SIP] is there a Qt5 example for SIP?
brett at stottlemyer.com
brett at stottlemyer.com
Sun Jul 7 12:46:02 BST 2013
> On Sat, 6 Jul 2013 07:30:43 -0700, brett at stottlemyer.com wrote:
>> Hi Phil,
>>
>> I am trying to see if SIP will help me with a task I'm trying to solve.
> I
>> started out by trying the More Complex C++ Example in the docs.
> However,
>> I'm using Qt5, and the example is for Qt4.
>>
>> I see the pyqtconfig is part of Qt4, but not Qt5. No problem, except
>> pyqtconfig is pretty integrated into the example, and as a beginner, I'm
>> not sure how to take pyqtconfig out.
>>
>> Is there a Qt5 example for SIP?
>
> Look at the configure.py for PyQt5. A minimal build system would just be a
> shell script that invoked sip then the C++ compiler then the linker. The
> only thing you need to consider is to use the right -t flags to sip and
> these can be found by introspecting current versions of PyQt.
>
> Phil
>
Thanks for the pointers. I've got the example working. But now I'm
having trouble extending the example.
I've got a bunch of enums I need to make available, some of which have
overlapping names. I've been handling this by putting them in different
namespaces. But sip is complaining about that. I saw an old mailing list
question on the topic
(http://www.riverbankcomputing.com/pipermail/pyqt/2007-August/016847.html),
but no solution was posted.
My .h file is:
// Define the interface to the hello library.
#include <qlabel.h>
#include <qwidget.h>
#include <qstring.h>
#if defined HELLO_DLL
# define HELLO_DLLSPEC Q_DECL_EXPORT
#else
# define HELLO_DLLSPEC Q_DECL_IMPORT
#endif
namespace MyNamespace { enum MyEnum { No=0, Yes=1}; };
class HELLO_DLLSPEC Hello : public QLabel {
// This is needed by the Qt Meta-Object Compiler.
Q_OBJECT
public:
Hello(QWidget *parent = 0);
private:
// Prevent instances from being copied.
Hello(const Hello &);
Hello &operator=(const Hello &);
};
#if !defined(Q_OS_WIN)
void setDefault(const QString &def);
#endif
My .sip file is:
// Define the SIP wrapper to the hello library.
%Module hello
%Import QtGui/QtGuimod.sip
%Import QtWidgets/QtWidgetsmod.sip
%If (Qt_5_0_0 -)
namespace MyNamespace
{
%TypeHeaderCode
#include <hello.h>
%End
enum MyEnum { No=0, Yes=1};
};
class Hello : public QLabel {
%TypeHeaderCode
#include <hello.h>
%End
public:
Hello(QWidget *parent /TransferThis/ = 0);
private:
Hello(const Hello &);
};
%If (!WS_WIN)
void setDefault(const QString &def);
%End
%End
The compiler (linker, actually) is complaining about missing symbols:
Creating library release\hello.lib and object release\hello.exp
siphellocmodule.obj : error LNK2001: unresolved external symbol "struct
_pyqt4ClassTypeDef sipTypeDef_hello_MyNamespace"
(?sipTypeDef_hello_MyNamespace@@3U_pyqt4ClassTypeDef@@A)
release\hello.dll : fatal error LNK1120: 1 unresolved externals
What's the proper way to describe this to sip?
Thanks!
More information about the PyQt
mailing list