Sto realizzando un'applicazione Qt Quick GUI (per Windows), che utilizza OpenGL e C++ per alcune risorse computazionalmente intensive. Voglio incorporare il codice Python nell'app, per fare alcune cose che sono relativamente più facili in Python.Incorporare Python 3.4 in un'applicazione Qt C++?
Fondamentalmente, voglio solo il codice C++ per chiamare una funzione in uno script python e lasciare che lo script faccia il lavoro, quindi memorizzare i dati restituiti in una variabile (stringa, o float ecc.) Per ulteriore uso. Sto usando Qt creator, e ho ottenuto python3 lib per il compilatore MinGW. Ho provato un po 'di codice, ma sembra che python lib non sia abbastanza compatibile con Qt creator. Sta usando pyqt per questo sarà una buona idea? Quale sarà il modo migliore e più semplice per farlo?
EDIT: Questo è il codice di base che ho provato, prima mi ha dato un errore dicendo che non è possibile trovare pyconfig.h. Poi ho aggiunto un INCUDEPATH alla mia directory include python34.
#include "mainwindow.h"
#include <QApplication>
#include <boost/python.hpp>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
using namespace boost::python;
PyObject *pName, *pModule, *pDict, *pFunc, *pValue;
Py_Initialize();
pName = PyString_FromString(argv[1]);
pModule = PyImport_Import(pName);
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, argv[2]);
if (PyCallable_Check(pFunc))
{
PyObject_CallObject(pFunc, NULL);
} else
{
PyErr_Print();
}
// Clean up
Py_DECREF(pModule);
Py_DECREF(pName);
Py_Finalize();
return a.exec();
}
mio .pro di file:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TestWidgetApp
TEMPLATE = app
INCLUDEPATH += C:/boost_1_57_0
INCLUDEPATH += C:/Python34/include
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
OTHER_FILES +=
Poi i seguenti errori:
C: \ Python34 \ includono \ object.h: 435: errore: C2059: errore di sintassi: '; '
C: \ Python34 \ include \ object.h: 435: errore: C2238: token imprevisti precedenti ";"
C: \ Users \ Amol \ Desktop \ TestWidgetApp \ main.cpp: 19: errore: C3861: 'PyString_FromString': identificatore non trovato
Puoi mostrare il codice che hai provato e spiegare perché non ha funzionato? – user3419537
Secondo me sarebbe molto più semplice costruire l'app in PyQt + PyOpenGL e se necessario eseguire il calcolo in un modulo C++. PyQt e PyOpenGL sono wrapper attorno al codice C++, quindi non rallentano. E se i tuoi calcoli usano routine comuni (ad esempio approssimazione lineare, moltiplicazione di matrici, ecc.), Che hanno anche librerie Python scritte in C++, puoi saltare l'intera parte C++. – Fenikso
RTFM [Incorporamento di Python in un'altra applicazione] (https://docs.python.org/3/extending/embedding.html) –