Ecir Hana Ecir Hana - 2 years ago 251
Python Question

Embedding Python in Qt 5

I would like to embed Python interpreter in to a Qt 5 application.

I have a working application in Qt 5 but when I put

#include <Python.h>

at the top (below Qt headers) the compilation breaks with

../sample/python3.3m/object.h:432:23: error: expected member name or ';' after declaration specifiers
PyType_Slot *slots; /* terminated by slot==0. */
~~~~~~~~~~~ ^

When I put Python header above the Qt headers it breaks with

In file included from ../Qt5.0.1/5.0.1/clang_64/include/QtGui/QtGui:59:
../Qt5.0.1/5.0.1/clang_64/include/QtGui/qpagedpaintdevice.h:63:57: error: expected '}'
A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1,
/usr/include/sys/termios.h:293:12: note: expanded from macro 'B0'
#define B0 0
../Qt5.0.1/5.0.1/clang_64/include/QtGui/qpagedpaintdevice.h:62:19: note: to match this '{'
enum PageSize { A4, B5, Letter, Legal, Executive,
1 error generated.

Please, does anyone know why this happens? I could be because Qt and Python define some common words? What can I do about it?

Answer Source

This happens because including Python.h first indirectly includes termios.h, which defines B0 to be 0, which in turn qpagedpaintdevice.h want's to use as a variable name. Including Python.h after the Qt includes does pretty much the same thing the other way around with the string 'slots'.

I suggest the following order:

#include <Python.h>
#undef B0
#include <QWhatEver>
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download