eismultiplexer-qt/pythonrunner.h

46 lines
1 KiB
C++

#pragma once
#include <QTextEdit>
#include <QProcess>
#include <QObject>
#include <QTemporaryDir>
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
class PythonRunner : public QObject {
Q_OBJECT
public:
PythonRunner(QTextEdit* outputWidget, QObject* parent = nullptr);
~PythonRunner();
bool runScript(const QString& scriptContent);
void stopScript();
private slots:
void onOutputAvailable();
void onErrorAvailable();
void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onVenvSetupFinished();
void setupVenv();
public slots:
void onVenvProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
signals:
void scriptFinished(int code);
void venvSetupProgress(const QString& message);
private:
QTextEdit* m_outputWidget;
QProcess* m_process;
QProcess* m_venvProcess;
QTemporaryDir dir;
QString venvPath();
QString pythonExePath();
void ensureVenvReady();
bool venvReady;
QMutex venvMutex;
QWaitCondition venvCondition;
};