我正在製作一個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