<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif">This is a question about the PyQt implementation of <span style="font-family:monospace,monospace">QLineEdit.setReadOnly()</span>, but it also applies to hundreds of similar functions in Qt/PyQt.</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">I asked elsewhere why the C++ documentation for <span style="font-family:monospace,monospace">QLineEdit::setReadOnly()</span> is <i>not</i> marked <span style="font-family:monospace,monospace">virtual</span>, given that from a PyQt derived class I <i>can</i> override <span style="font-family:monospace,monospace">QLineEdit.setReadOnly()</span>.  I was told:</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><div class="gmail-content">
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><p>Because it's not a virtual function and yes, the documentation is correct (you can check the source code)</p><p>Python is an entirely different beast. You can modify any element of an object the way you want.</p></blockquote>


</div>So, is the following what is going on:</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><div class="gmail-content"><ul>
<li>From C++ <code>QLineEdit::setReadOnly()</code> is <em>not</em> an overridable, virtual function.</li>
<li>From PyQt, there is a "wrapper" around the whole of <code>QLineEdit</code>, and that has chosen to supply a function, which <em>happens</em> to also be named <code>setReadOnly</code> [but could have been called anything, e.g. <code>pyqtSetReadOnly</code>], which (in Python) <em>is</em> a virtual, overridable function.</li>
<li>PyQt's <code>QLineEdit.setReadOnly()</code> presumably calls the base C++ <code>QLineEdit::setReadOnly()</code> to effect its work.</li>
</ul>
<p>The big difference then is:</p>
<ul>
<li>In the case of a <em>genuine</em> <code>virtual</code> Qt C++ function, which I have chosen to override in PyQt, if Qt code <em>internally</em> calls the virtual function from itself it <em>will</em> hit my Python override.</li>
<li>But in the case of this <em>non-</em><code>virtual</code> <code>QLineEdit::setReadOnly()</code>, any internal Qt C++ calls to it will <em>not</em> be affected by the "override" I have defined from Python.</li>
</ul>
<p>Conclusion:<br></p><ol><li>Does the above sound right?</li><li><small class="gmail-pull-right"><span class="gmail-dropdown gmail-moderator-tools gmail-bottom-sheet"></span></small><small class="gmail-pull-right"><span class="gmail-post-tools"></span></small>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 <span style="font-family:monospace,monospace">virtual</span> & <span style="font-family:monospace,monospace">override</span> keywords?</li></ol></div></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><span style="font-family:tahoma,sans-serif">Kindest,</span></div><div><span style="font-family:tahoma,sans-serif">Jonathan</span></div></div></div></div></div>
</div>