Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 205
Ecir Hana Avatar asked Feb 25 '13 22:02

Ecir Hana


1 Answers

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>
like image 163
axxel Avatar answered Oct 14 '22 11:10

axxel