aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libpyside/pysideqflags.cpp16
-rw-r--r--tests/QtCore/qflags_test.py2
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