【发布时间】:2015-01-18 15:39:15
【问题描述】:
我正在制作一个 Qt Quick GUI 应用程序(用于 Windows),它使用 OpenGL 和 C++ 处理一些计算密集型的东西。我想将python代码嵌入到应用程序中,以做一些在python中相对容易的事情。
基本上,我只是想让 c++ 代码在 python 脚本中调用一个函数并让脚本完成这项工作,然后将返回的数据存储在一个变量(字符串或浮点数等)中以供进一步使用。我正在使用 Qt creator,并且我得到了用于 MinGW 编译器的 python3 库。我尝试了一些代码,但它看起来像 python lib 与 Qt creator 不太兼容。使用 pyqt 是个好主意吗?最好和最简单的方法是什么?
编辑: 这是我尝试的基本代码,首先它给了我一个错误说,找不到 pyconfig.h。然后我在我的 python34 包含目录中添加了一个 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();
}
我的 .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\include\object.h:435:错误:C2059:语法错误:';'
C:\Python34\include\object.h:435: 错误: C2238: ';' 前面的意外标记
C:\Users\Amol\Desktop\TestWidgetApp\main.cpp:19:错误:C3861:'PyString_FromString':找不到标识符
【问题讨论】:
-
您能否展示您尝试过的代码并解释为什么它不起作用?
-
在我看来,在 PyQt + PyOpenGL 中构建应用程序并在必要时在 C++ 模块中进行计算会容易得多。 PyQt 和 PyOpenGL 是 C++ 代码的包装器,因此它不会变慢。如果你的计算使用了常用的例程(例如线性逼近、矩阵乘法等),这些例程也有用 C++ 编写的 Python 库,你可以跳过整个 C++ 部分。
-
好的,我编辑并添加了我尝试过的代码,你们现在可以取消保留吗?另外,我应该将包含乘法函数的 py 文件放在哪里? (代码基于以下文章:goo.gl/gTnu6)