[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