Time for action – writing a Qt wrapper for embedding Python
As the first task, we will implement the last program using an object-oriented API. Create a new console project and add the following class to it:
#include <Python.h>
#include <QObject>
#include <QString>
class QtPython : public QObject {
Q_OBJECT
public:
QtPython(const char *progName, QObject *parent = 0) : QObject(parent) {
if(progName != 0) {
wchar_t buf[strlen(progName+1)];
mbstowcs(buf, progName, strlen(progName));
Py_SetProgramName(buf);
}
Py_InitializeEx(0);
}
~QtPython() { Py_Finalize(); }
void run(const QString &program) {
PyRun_SimpleString(qPrintable(program));
}
};Then, add a
main() function as shown in the following snippet:
#include "qtpython.h"
int main(int argc, char **argv) {
QtPython python(argv[0]);
python.run("print('Hello from Python')");
return 0;
}Finally open the .pro file and tell Qt to...