SXXXXXXX_PyBusMonitor1553/cpp/GrifoScope/QgPython/Files/qgpython.cpp
2025-12-17 07:59:30 +01:00

119 lines
2.4 KiB
C++

#include "qgpython.h"
#include <QDebug>
static PythonQtObjectPtr qgpy_app_module;
QgPython::QgPython():
mainWindow(0)
{
PythonQt::init(PythonQt::RedirectStdOut|PythonQt::IgnoreSiteModule);
}
void QgPython::initialize()
{
}
QgPython& QgPython::instance()
{
static QgPython pyInstance;
return pyInstance;
}
PythonQt& QgPython::self() const
{
return *PythonQt::self();
}
PythonQtObjectPtr QgPython::mainContext()
{
PythonQtObjectPtr mainContext = PythonQt::self()->getMainModule();
return mainContext;
}
PythonQtObjectPtr QgPython::createMainApplicationModule(const QString& module_name)
{
if (!qgpy_app_module)
{
if (!module_name.isEmpty())
{
qgpy_app_module=QgPython::instance().self().createModuleFromScript(module_name,QString(""));
}
if (qgpy_app_module==0)
qgpy_app_module=mainContext();
else
mainContext().evalScript(QString("import %1").arg(module_name));
}
return qgpy_app_module;
}
PythonQtObjectPtr QgPython::mainModule()
{
if (!qgpy_app_module)
{
qgpy_app_module=mainContext();
}
return qgpy_app_module;
}
#include <QLibrary>
typedef void (*PythonQt_QtAll_Initialize_t)(void);
static PythonQt_QtAll_Initialize_t qtall_init;
void QgPython::importQtAll()
{
if (qtall_init)
{
qDebug()<<"QgPy:"<<"QtAll already initialized";
return;
}
QString ver=QString("%1").arg(QGPY_VERSION);
#if !defined(QT_NO_DEBUG)
QLibrary pyall("PythonQt_QtAll-Qt5-Python"+ver+"_d");
#else
QLibrary pyall("PythonQt_QtAll-Qt5-Python"+ver);
#endif
bool ok=pyall.load();
if (!ok)
{
qWarning()<<"QgPy:"<<"Cannot load QtAll:"<<pyall.errorString();
return;
}
qtall_init=(PythonQt_QtAll_Initialize_t)pyall.resolve("PythonQt_QtAll_Initialize");
if (!qtall_init)
{
qWarning()<<"QgPy:"<<"Cannot resolve QtAll initializer:"<<pyall.errorString();
return;
}
qtall_init();
}
#include <QMainWindow>
#include <QWidget>
#include <QApplication>
QObject* QgPython::mw() const
{
if (mainWindow==0)
{
foreach(QWidget *widget, qApp->topLevelWidgets())
if (QMainWindow* mainW = qobject_cast<QMainWindow*>(widget))
{
mainWindow=mainW;
return mainWindow;
}
return 0;
}
return mainWindow;
}
void QgPython::setMainWindow(QObject *w)
{
mainWindow=w;
}