diff --git a/src/PythonQt.cpp b/src/PythonQt.cpp index 7bb87d3a..a01e7746 100644 --- a/src/PythonQt.cpp +++ b/src/PythonQt.cpp @@ -675,6 +675,7 @@ PythonQtObjectPtr PythonQt::importModule(const QString& name) QVariant PythonQt::evalCode(PyObject* object, PyObject* pycode) { QVariant result; + this->resetErrorFlag(); if (pycode) { PyObject* dict = NULL; if (PyModule_Check(object)) { @@ -703,6 +704,7 @@ QVariant PythonQt::evalScript(PyObject* object, const QString& script, int start QVariant result; PythonQtObjectPtr p; PyObject* dict = NULL; + this->resetErrorFlag(); if (PyModule_Check(object)) { dict = PyModule_GetDict(object); } else if (PyDict_Check(object)) { @@ -722,6 +724,7 @@ QVariant PythonQt::evalScript(PyObject* object, const QString& script, int start void PythonQt::evalFile(PyObject* module, const QString& filename) { PythonQtObjectPtr code = parseFile(filename); + this->resetErrorFlag(); if (code) { evalCode(module, code); } else { @@ -733,6 +736,7 @@ PythonQtObjectPtr PythonQt::parseFile(const QString& filename) { PythonQtObjectPtr p; p.setNewRef(PythonQtImport::getCodeFromPyc(filename)); + this->resetErrorFlag(); if (!p) { handleError(); } @@ -1022,6 +1026,7 @@ QVariant PythonQt::call(PyObject* callable, const QVariantList& args) QVariant r; PythonQtObjectPtr result; result.setNewRef(callAndReturnPyObject(callable, args)); + this->resetErrorFlag(); if (result) { r = PythonQtConv::PyObjToQVariant(result); } else { @@ -1243,6 +1248,14 @@ bool PythonQt::errorOccured()const return PythonQt::priv()->_ErrorOccured; } +void PythonQt::resetErrorFlag() +{ + if (PythonQt::self()) + { + PythonQt::priv()->_ErrorOccured = false; + } +} + void PythonQt::addSysPath(const QString& path) { PythonQtObjectPtr sys; @@ -1568,6 +1581,7 @@ PythonQtInstanceWrapper* PythonQtPrivate::findWrapperAndRemoveUnused(void* obj) PythonQtObjectPtr PythonQtPrivate::createModule(const QString& name, PyObject* pycode) { PythonQtObjectPtr result; + PythonQt::self()->resetErrorFlag(); if (pycode) { result.setNewRef(PyImport_ExecCodeModule((char*)name.toLatin1().data(), pycode)); } else { @@ -1747,4 +1761,4 @@ void PythonQtPrivate::shellClassDeleted( void* shellClass ) // if the wrapper is a QObject, we do not handle this here, // it will be handled by the QPointer<> to the QObject, which becomes NULL // via the QObject destructor. -} \ No newline at end of file +} diff --git a/src/PythonQt.h b/src/PythonQt.h index 4134fb64..b5f6bc48 100644 --- a/src/PythonQt.h +++ b/src/PythonQt.h @@ -484,6 +484,10 @@ class PYTHONQT_EXPORT PythonQt : public QObject { //! return \a True if \a handleError() has been called and an error occured. bool errorOccured()const; + //! reset error flag. After calling this, errorOccured() will return False. + //! \sa PythonQt::errorOccured() + void resetErrorFlag(); + //! set a callback that is called when a QObject with parent == NULL is wrapped by pythonqt void setQObjectWrappedCallback(PythonQtQObjectWrappedCB* cb); //! set a callback that is called when a QObject with parent == NULL is no longer wrapped by pythonqt