QT:5.14.2
Python:3.7
Python32位和64位都可以,自己保证对应起来就可以了,本教程默认已经安装qt和Python,本人使用的32位。
1.添加Python环境
qt的工程文件(.pro)中添加Python的库文件,头文件的应用
win32: PYTHON37_LOCATION = E:\soft2\python32
win32: message($$PYTHON37_LOCATION)
win32: LIBS += -L$${PYTHON37_LOCATION}\libs\ -lpython37
win32: INCLUDEPATH += $${PYTHON37_LOCATION}\include
win32: DEPENDPATH += $${PYTHON37_LOCATION}\include
自己根据本机路径进行更改。
2.添加Python文件
qt中已经支持添加Python文件,直接工程右键“add new...”中选择Python file,file命名为“mypro”,我进行了数值类型和字符类型测试。在Python文件中写入:
不要把文件命名为test,会和Python中的库冲突,程序崩溃!
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
def sum(a,b):
c=a+b
return c
def printstr(d):
return d
3.接口测试
3.1测试数值类型传递
void MainWindow::add()
{
Py_Initialize(); //每次调用Python中接口初始化
PyRun_SimpleString("import sys"); //基础模块添加
PyRun_SimpleString("sys.argv = ['python.py']");
PyRun_SimpleString("sys.path.append('./')"); //Python路径
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
pModule = PyImport_ImportModule("mypro"); //Python文件名
pFunc = PyObject_GetAttrString(pModule, "sum"); //Python文件中的函数名
//创建参数:
PyObject* pArgs = PyTuple_New(2); //函数调用的参数传递均是以元组的形式打包的,2表示参数个数
PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 9)); //0---序号 i表示创建int型变量
PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 7)); //1---序号
//返回值
PyObject* pReturn = NULL;
pReturn = PyEval_CallObject(pFunc, pArgs); //调用函数
//将返回值转换为int类型
int result;
PyArg_Parse(pReturn, "i", &result); //i表示转换成int型变量
// cout << "5+7 = " << result << endl; //直接打印结果
ui->lineEdit->setText(QString::number(result)); //文本框查看结果
Py_Finalize(); //调用结束,清理Python
}
3.2测试字符类型传递
void MainWindow::print()
{
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.argv = ['python.py']");
PyRun_SimpleString("sys.path.append('./')");
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
pModule = PyImport_ImportModule("mypro");
pFunc = PyObject_GetAttrString(pModule, "printstr");
PyObject* pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, Py_BuildValue("s", "传递字符串"));
PyObject* pReturn = NULL;
pReturn = PyEval_CallObject(pFunc, pArgs);
char* result;
PyArg_Parse(pReturn, "s", &result);
ui->lineEdit->setText(result);
Py_Finalize();
}
4.qt creator直接运行Python脚本
工具->选项->环境->外部工具
添加目录,我命名了为“python”,在目录中再添加工具“python3”,设置执行档,参数,工作目录
执行档:python.exe路径;参数 :%{CurrentDocument:FilePath};工作目录:%{CurrentDocument:Path}
设置完成后,选择脚本,工具->外部->python->python3直接执行脚本。