2014-04-14 16 views
5

Vorrei incorporare l'interprete di Python 3.4 in un'applicazione Qt 5.2.1 (64 bit). Tuttavia, sto avendo problemi di compilazione, intendo quando includo l'intestazione Python nel main.cpp che compila bene.Incorporamento di Python3 in Qt 5

#include <python.h> 
#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 

ma quando ho messo altrove (dopo le intestazioni Qt)

// 
// embedpytest.cpp 
// 
#include <QLibrary> 
#include <python.h> 


EmbedPyTest::EmbedPyTest() 
{ 
} 

ottengo errori di compilazione:

C:\Python34\include\object.h:435: error: C2059: syntax error : ';' 
C:\Python34\include\object.h:435: error: C2238: unexpected token(s) preceding ';' 

enter image description here

E 'problema molto simile a questo , ma la soluzione non funziona

Embedding Python in Qt 5

Qualcuno sa come risolvere questo problema? o suggerire qualche soluzione alternativa in modo che python.h e Qt5 possano vivere insieme felici e contenti?

+0

In che modo questa risposta non ha funzionato? Perché ha funzionato per me esattamente con la stessa versione di Python e Qt. – cmannett85

+0

sembra impossibile. Sto usando Python a 64 bit 3.4, Qt 5.2.1 a 64 bit e Visual Studio 2012 – krusty

+0

Stavo usando g ++, forse quella era la differenza. – cmannett85

risposta

3

La linea incriminata è questa:

PyType_Slot *slots; /* terminated by slot==0. */ 

Il problema è che con questa linea, "slot" è una parola chiave per impostazione predefinita in Qt. Per poter utilizzare quel nome di variabile in altri progetti, è necessario utilizzare questo nel file di progetto:

CONFIG += no_keywords 

Per i dettagli, consultare la documentation:

Utilizzando Qt con segnali 3rd Party e slot

È possibile utilizzare Qt con un meccanismo di segnale/slot di terze parti. Puoi persino utilizzare entrambi i meccanismi nello stesso progetto. Basta aggiungere la seguente riga al file qmake project (.pro).

CONFIG += no_keywords 

Racconta Qt di non definire la moc segnali parole chiave, gli slot, ed emettere, perché questi nomi saranno utilizzati da una libreria di terze parti, ad esempio, Incremento. Quindi per continuare a utilizzare segnali e slot Qt con il flag no_keywords, è sufficiente sostituire tutti gli usi delle parole chiave Qt Moc nelle sorgenti con le macro Qt corrispondenti Q_SIGNALS (o Q_SIGNAL), Q_SLOTS (o Q_SLOT) e Q_EMIT.

+0

ha senso ma non sembra funzionare. Ho appena provato CONFIG + = no_keywords ma è un cambiamento in peggio intendo che ottengo 114 errori. – krusty

+0

@krusty: funziona per me come un incantesimo, http://paste.kde.org/pxebudk7g – lpapp

+0

true che funziona, ma ho le classi di QObject nel mio progetto e sembra che causi problemi. Aggiungi all'esempio una classe vuota con classe base, ad es. QOject http://paste.kde.org/p9qrwvve0 Quando provo a compilare ottengo 36 errori. Qualche suggerimento su come risolvere questo problema? – krusty