File: pyqt_qvariant.rst

package info (click to toggle)
pyqt5 5.7%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 19,844 kB
  • ctags: 5,974
  • sloc: python: 93,052; cpp: 20,268; xml: 282; makefile: 270; sh: 31
file content (40 lines) | stat: -rw-r--r-- 2,144 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.. _ref-qvariant:

Support for :class:`~PyQt5.QtCore.QVariant`
===========================================

PyQt4 implements two APIs for :class:`~PyQt5.QtCore.QVariant`.  v1 (the default
for Python v2) exposes the :class:`~PyQt5.QtCore.QVariant` class to Python and
requires applications to explicitly convert a :class:`~PyQt5.QtCore.QVariant`
to the actual value.  v2 (the default for Python v3) does not expose the
:class:`~PyQt5.QtCore.QVariant` class to Python and automatically converts a
:class:`~PyQt5.QtCore.QVariant` to the actual value.  While this is usually the
best thing to do, it does raise problems of its own:

- Information is lost when converting between a C++
  :class:`~PyQt5.QtCore.QVariant` and the corresponding Python object.  For
  example a :class:`~PyQt5.QtCore.QVariant` distinguishes between signed and
  unsigned integers but Python doesn't.  Normally this doesn't matter but some
  applications may need to make the distinction.

- There is no obvious way to represent a null :class:`~PyQt5.QtCore.QVariant`
  as a standard Python object.  PyQt4 introduced the ``QPyNullVariant`` class
  to address this problem.

Multiple APIs are intended to help manage an application's use of an old API to
a newer, incompatible API.  They cannot be used to temporarily change the
behaviour - modules that rely on different API versions cannot be used in the
same application.

In PyQt5 the implementation of :class:`~PyQt5.QtCore.QVariant` is different to
those of PyQt4.  By default the behaviour is the same as PyQt4's v2 API.
However it is possible to temporarily suppress the automatic conversion of a
C++ :class:`~PyQt5.QtCore.QVariant` to a Python object and to return a wrapped
Python :class:`~PyQt5.QtCore.QVariant` instead - behaviour similar to PyQt4's
v1 API - by calling the :func:`sip.enableautoconversion` function.

The actual value of a wrapped Python :class:`~PyQt5.QtCore.QVariant` is
obtained by calling its :meth:`~PyQt5.QtCore.QVariant.value` method.  (Note
that in PyQt4's v1 API this method is called ``toPyObject()``.)

PyQt5 does not support the ``QPyNullVariant`` class as it is no longer needed.