Go to the documentation of this file.00001 #ifndef _PYTHONQTOBJECTPTR_H
00002 #define _PYTHONQTOBJECTPTR_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00043
00044
00045 #include <Python.h>
00046 #include "PythonQtSystem.h"
00047 #include <QVariant>
00048 #include <QVariantList>
00049
00051 class PYTHONQT_EXPORT PythonQtObjectPtr
00052 {
00053 public:
00054 PythonQtObjectPtr():_object(NULL) {}
00055
00056 PythonQtObjectPtr(const PythonQtObjectPtr &p):_object(NULL) {
00057 setObject(p.object());
00058 }
00059
00061 PythonQtObjectPtr(const QVariant& variant):_object(NULL) {
00062 fromVariant(variant);
00063 }
00064
00065 PythonQtObjectPtr(PyObject* o) {
00066 _object = o;
00067 if (o) Py_INCREF(_object);
00068 }
00069
00070 ~PythonQtObjectPtr() { if (_object) Py_DECREF(_object); }
00071
00073 bool fromVariant(const QVariant& variant);
00074
00075 PythonQtObjectPtr &operator=(const PythonQtObjectPtr &p) {
00076 setObject(p.object());
00077 return *this;
00078 }
00079
00080 PythonQtObjectPtr &operator=(PyObject* o) {
00081 setObject(o);
00082 return *this;
00083 }
00084
00085
00086 PythonQtObjectPtr &operator=(const QVariant& variant) {
00087 fromVariant(variant);
00088 return *this;
00089 }
00090
00091
00092 bool operator==( const PythonQtObjectPtr &p ) const {
00093 return object() == p.object();
00094 }
00095
00096 bool operator!= ( const PythonQtObjectPtr& p ) const {
00097 return !( *this == p );
00098 }
00099
00100 bool operator==( PyObject* p ) const {
00101 return object() == p;
00102 }
00103
00104 bool operator!= ( PyObject* p ) const {
00105 return object() != p;
00106 }
00107
00108 bool isNull() const { return !object(); }
00109
00110 PyObject* operator->() const { return object(); }
00111
00112 PyObject& operator*() const { return *( object() ); }
00113
00114 operator PyObject*() const { return object(); }
00115
00117 void setNewRef(PyObject* o) {
00118 if (o != _object) {
00119 if (_object) Py_DECREF(_object);
00120 _object = o;
00121 }
00122 }
00123
00124 PyObject* object() const {
00125 return _object;
00126 }
00127
00129 QVariant evalScript(const QString& script, int start = Py_file_input);
00130
00133 QVariant evalCode(PyObject* pycode);
00134
00136 void evalFile(const QString& filename);
00137
00139 void addObject(const QString& name, QObject* object);
00140
00142 void addVariable(const QString& name, const QVariant& v);
00143
00145 void removeVariable(const QString& name);
00146
00148 QVariant getVariable(const QString& name);
00149
00151 QVariant call(const QString& callable, const QVariantList& args = QVariantList());
00152
00154 QVariant call(const QVariantList& args = QVariantList());
00155
00156 protected:
00157
00158 void setObject(PyObject* o) {
00159 if (o != _object) {
00160 if (_object) Py_DECREF(_object);
00161 _object = o;
00162 if (_object) Py_INCREF(_object);
00163 }
00164 }
00165
00166 private:
00167 PyObject* _object;
00168 };
00169
00170
00171
00172 Q_DECLARE_METATYPE(PythonQtObjectPtr)
00173
00174 #endif