将python 3.4嵌入到C++ Qt应用程序中?

Amo*_*kar 7 c++ python opengl qt pyqt

我正在制作一个Qt Quick GUI应用程序(用于Windows),它使用OpenGL和C++来处理一些计算密集型的东西.我想在应用程序中嵌入python代码,以便做一些在python中相对容易的东西.

基本上,我只是希望c ++代码在python脚本中调用函数并让脚本完成工作,然后将返回的数据存储在变量(字符串或浮点数等)中以供进一步使用.我正在使用Qt创建器,我为MinGW编译器提供了python3 lib.我尝试了一些代码,但它看起来像python lib与Qt creator不完全兼容.使用pyqt这是一个好主意吗?什么是最好和最简单的方法呢?

编辑:这是我试过的基本代码,首先它给了我一个错误说,找不到pyconfig.h.然后我在我的python34 include目录中添加了一个INCUDEPATH.

#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();
}
Run Code Online (Sandbox Code Playgroud)

我的简历:

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 +=
Run Code Online (Sandbox Code Playgroud)

然后出现以下错误:

C:\ Python34\include\object.h:435:错误:C2059:语法错误:';'

C:\ Python34\include\object.h:435:错误:C2238:';'之前的意外标记

C:\ Users\Amol\Desktop\TestWidgetApp\main.cpp:19:错误:C3861:'PyString_FromString':找不到标识符

Ray*_*nda 0

我已从您的示例中删除了所有 Qt 代码,然后尝试编译它(Qt 与您的编译错误无关)。它为我编译。不同之处在于我使用了Python 2.7中的包含文件 。

PyString_FromString所以我在文件夹中对字符串进行了一些搜索C:\Python33\includes:(我注意到你使用 python 3.4 而不是 3.3,但我怀疑这是一个 3.x 的东西)和C:\Python27\includes.

结果:

Python 3.3

在Python33的包含文件夹中搜索字符串PyString_FromString

Python 2.7

在Python27的包含文件夹中搜索字符串PyString_FromString

因此,显然,您的 BoostPython 版本不支持 Python 3.4。