PythonQT完美将Python与QT结合,项目:https://github.com/MeVisLab/pythonqt(文档https://mevislab.github.io/pythonqt/)
1、脚本放入资源文件的使用方法:(参考PythonQt自带的例子CPPPyWrapperExample)
可将脚本放入资源文件中,如:/datarequest.py
A、mainModule.evalFile(":datarequest.py");
PythonQtObjectPtr tag = mainModule.evalScript("EyeD3Tagger()\n", Py_eval_input);
B、PythonQt::self()->setImporter(NULL); //这一句很重要
PythonQt::self()->getMainModule().evalScript("import sys");
PythonQt::self()->getMainModule().evalScript("sys.path.append(':')"); //这一句很重要
mainModule.evalScript("import datarequest\n");
PythonQtObjectPtr tag = mainModule.evalScript("datarequest.DataRequest()\n", Py_eval_input);
在PythonQt中evalScript函数不支持Unicode:
1 QVariant PythonQt::evalScript(PyObject* object, const QString& script, intstart)2 {3 QVariant result;4 PythonQtObjectPtr p;5 PyObject* dict =NULL;6 clearError();7 if (PyModule_Check(object)) {8 dict = PyModule_GetDict(object);9 } else if (PyDict_Check(object)) {10 dict = object;11 }12 if(dict) {13 p.setNewRef(PyRun_String(script.toLatin1().data(), start, dict, dict));
//p.setNewRef(PyRun_String(script.toUtf8().data(), start, dict, dict));14 }15 if(p) {16 result =PythonQtConv::PyObjToQVariant(p);17 } else{18 handleError();19 }20 returnresult;21 }
这是由于函数中第13行将脚本代码(script)传入Python时使用的是 toLation1 函数,这个函数是不支持百拉丁字符的,因此将这个函数替换成 toUtf8即可