我正在制作一个Qt Quick GUI应用程序(对于Windows),它使用OpenGL和C++进行一些计算密集型的工作。我想将python代码嵌入到应用程序中,以便在Python中执行一些相对容易的东西。将Python 3.4嵌入到C++ Qt应用程序中?
基本上,我只想让C++代码在python脚本中调用一个函数,并让脚本完成这项工作,然后将返回的数据存储在一个变量(字符串或浮点数等)中以备后用。我正在使用Qt创建器,并且我为MinGW编译器获得了python3库。我尝试了一些代码,但它看起来像python lib与Qt创建者不太兼容。是使用pyqt这将是一个好主意?什么是最好和最简单的方法来做到这一点?
编辑:这是我试过的基本代码,首先它给了我一个错误说,找不到pyconfig.h。然后我添加INCUDEPATH到我的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();
}
我pro文件:
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 +=
然后如下错误:
C:\ Python34 \包括\ object.h:435:错误:C2059:语法错误:“; “
C:\ Python34 \ include \ object.h:435:error:C2238:在';'之前的意外标记(s)
C:\用户\阿莫尔\桌面\ TestWidgetApp \ main.cpp中:19:错误:C3861: 'PyString_FromString':标识符找不到
你能展示你试过的代码并解释它为什么不起作用吗? – user3419537 2014-11-20 17:30:00
在我看来,在PyQt + PyOpenGL中构建应用程序要容易得多,并且如果需要的话,可以在C++模块中进行计算。 PyQt和PyOpenGL是C++代码的包装,所以它不会放慢速度。如果你的计算使用了常用的例程(例如线性逼近,矩阵乘法等),也有用C++编写的Python库,你可以跳过整个C++部分。 – Fenikso 2014-11-20 17:39:43
RTFM [在另一个应用程序中嵌入Python](https://docs.python.org/3/extending/embedding.html) – 2014-11-20 18:03:40