diff options
-rw-r--r-- | libpyside/pysideqflags.cpp | 16 | ||||
-rw-r--r-- | tests/QtCore/qflags_test.py | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/libpyside/pysideqflags.cpp b/libpyside/pysideqflags.cpp index f7ab7d630..8e962da30 100644 --- a/libpyside/pysideqflags.cpp +++ b/libpyside/pysideqflags.cpp @@ -22,6 +22,7 @@ #include "pysideqflags.h" #include <sbkenum.h> +#include <autodecref.h> extern "C" { struct SbkConverter; @@ -39,8 +40,21 @@ extern "C" { PyObject* PySideQFlagsNew(PyTypeObject *type, PyObject *args, PyObject *kwds) { + long val = 0; + if (PyTuple_GET_SIZE(args)) { + PyObject* arg = PyTuple_GET_ITEM(args, 0); + if (Shiboken::isShibokenEnum(arg)) {// faster call + val = Shiboken::Enum::getValue(arg); + } else if (PyNumber_Check(arg)) { + Shiboken::AutoDecRef number(PyNumber_Long(arg)); + val = PyLong_AsLong(number); + } else { + PyErr_SetString(PyExc_TypeError,"QFlags must be created using enums or numbers."); + return 0; + } + } PySideQFlagsObject* self = PyObject_New(PySideQFlagsObject, type); - self->ob_value = 0; + self->ob_value = val; return reinterpret_cast<PyObject*>(self); } diff --git a/tests/QtCore/qflags_test.py b/tests/QtCore/qflags_test.py index cfc3bff1b..78ed49b04 100644 --- a/tests/QtCore/qflags_test.py +++ b/tests/QtCore/qflags_test.py @@ -59,6 +59,8 @@ class QFlagOperatorTest(unittest.TestCase): flag_type = (flags & Qt.WindowType_Mask) self.assertEqual(flag_type, Qt.Window) + self.assertEqual(Qt.KeyboardModifiers(Qt.ControlModifier), Qt.ControlModifier) + def testOperatorBetweenFlags(self): '''QFlags & QFlags''' flags = Qt.NoItemFlags | Qt.ItemIsUserCheckable |