[PyQt] Understanding QLineEdit.setReadOnly() virtuality

J Barchan jnbarchan at gmail.com
Wed Jun 13 08:22:23 BST 2018


This is a question about the PyQt implementation of QLineEdit.setReadOnly(),
but it also applies to hundreds of similar functions in Qt/PyQt.

I asked elsewhere why the C++ documentation for QLineEdit::setReadOnly() is
*not* marked virtual, given that from a PyQt derived class I *can* override
QLineEdit.setReadOnly().  I was told:

> Because it's not a virtual function and yes, the documentation is correct
> (you can check the source code)
>
> Python is an entirely different beast. You can modify any element of an
> object the way you want.
>
So, is the following what is going on:

   - From C++ QLineEdit::setReadOnly() is *not* an overridable, virtual
   function.
   - From PyQt, there is a "wrapper" around the whole of QLineEdit, and
   that has chosen to supply a function, which *happens* to also be named
   setReadOnly [but could have been called anything, e.g. pyqtSetReadOnly],
   which (in Python) *is* a virtual, overridable function.
   - PyQt's QLineEdit.setReadOnly() presumably calls the base C++
   QLineEdit::setReadOnly() to effect its work.

The big difference then is:

   - In the case of a *genuine* virtual Qt C++ function, which I have
   chosen to override in PyQt, if Qt code *internally* calls the virtual
   function from itself it *will* hit my Python override.
   - But in the case of this *non-*virtual QLineEdit::setReadOnly(), any
   internal Qt C++ calls to it will *not* be affected by the "override" I
   have defined from Python.

Conclusion:

   1. Does the above sound right?
   2. Being a Python newbie: it is just sinking in, is it the case that all
   class functions are automatically overridable, because Python doesn't
   bother with virtual & override keywords?

-- 
Kindest,
Jonathan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20180613/71261dcb/attachment-0001.html>


More information about the PyQt mailing list