Tôi đang tạo một ứng dụng Qt Quick GUI (cho các cửa sổ), sử dụng OpenGL và C++ cho một số công cụ tính toán chuyên sâu. Tôi muốn nhúng mã python vào ứng dụng, để làm một số công cụ tương đối dễ dàng hơn trong python. Về cơ bản, tôi chỉ muốn mã C++ gọi hàm trong kịch bản lệnh python và để cho tập lệnh thực hiện công việc, sau đó lưu trữ dữ liệu được trả về trong một biến (chuỗi, hoặc phao vv) để sử dụng tiếp. Tôi đang sử dụng Qt creator, và tôi đã nhận được python3 lib cho trình biên dịch MinGW. Tôi đã thử một số mã, nhưng có vẻ như python lib không hoàn toàn tương thích với người tạo Qt. IS sử dụng pyqt cho điều này sẽ là một ý tưởng tốt? Điều gì sẽ là cách tốt nhất và dễ nhất để làm điều này?Nhúng python 3.4 vào ứng dụng C++ Qt?
EDIT: Đây là mã cơ bản tôi đã thử, trước tiên nó đã cho tôi một lỗi nói, không thể tìm thấy pyconfig.h. Sau đó, tôi thêm một INCUDEPATH để python34 của tôi bao gồm thư mục.
#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();
}
tập tin .pro của tôi:
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 +=
Sau đó, các lỗi sau đây:
C: \ Python34 \ include \ object.h: 435: lỗi: C2059: lỗi cú pháp: '; '
C: \ Python34 \ include \ object.h: 435: lỗi: C2238: mã thông báo không mong muốn trước ';'
C: \ Users \ Amol \ Desktop \ TestWidgetApp \ main.cpp: 19: lỗi: C3861: 'PyString_FromString': nhận dạng không tìm thấy
Bạn có thể hiển thị mã bạn đã thử và giải thích lý do mã không hoạt động không? – user3419537
Theo tôi, sẽ dễ dàng hơn nhiều khi xây dựng ứng dụng trong PyQt + PyOpenGL và nếu cần thiết, hãy tính toán trong mô-đun C++. PyQt và PyOpenGL là các trình bao bọc xung quanh mã C++, vì vậy nó không làm chậm. Và nếu tính toán của bạn sử dụng các thường trình thông thường (ví dụ: phép tính xấp xỉ tuyến tính, phép nhân ma trận, vv), cũng có các thư viện Python được viết bằng C++, bạn có thể bỏ qua toàn bộ phần C++. – Fenikso
RTFM [Nhúng Python vào một ứng dụng khác] (https://docs.python.org/3/extending/embedding.html) –