How and why Qt functions can be overridden
Rodrigo de Salvo Braz
rodrigobraz at gmail.com
Sun Aug 29 01:50:20 BST 2021
I think I can answer just a little bit of your questions.
One thing is that I don't think being public or protected or private is
important for overridden methods. They will behave the same way regardless
as far as virtualness and being overridden are concerned. The only thing
that changes is who can invoke them.
Another thing is that, even if a method is not virtual, you can still
override and use it. Suppose there is a class A with a method foo that is
not virtual. If I sub-class A with a new class B with a method foo, then:
A& a_ref = B();
B b = B();
a_ref->foo(); // calls original A::foo, because a_ref does not "know" this
is a B object
b->foo(); // calls overridden method B::foo, because the compiler knows b
is a B object.
Hope that helps...
Rodrigo
On Sat, Aug 28, 2021 at 4:33 PM Maurizio Berti <maurizio.berti at gmail.com>
wrote:
> Premise: while I can read and almost always understand C++, I don't really
> know a lot about it.
>
> Subclassing and overriding of Qt classes is almost natural to me, but I
> still don't understand some aspects about function overriding, since I'm
> too accustomed to the "simpler" way of python subclassing.
>
> For instance, many widgets have an initStyleOption that cannot be
> overridden (well, it could, but it's never called natively), while a
> similar function can be overridden for QStyledItemDelegate.
>
> From my limited knowledge I can understand that I can override/overwrite a
> function in a subclass and be sure that it's called natively by Qt if it's
> public or virtual (like the initStyleOption of QStyledItemDelegate), but
> this is still a very "foggy" understanding.
>
> For example, I can override all QItemDelegate drawing functions, except
> for drawBackground, which is not virtual; this means that if I want to
> implement it (because, for some reason, I don't want to use
> QStyledItemDelegate), I need to completely port its paint method so that I
> can finally call a possibly custom drawBackground.
> Is it possible to make it virtual? If not (as I believe it is), then why?
> Also, most importantly, why is it not virtual?
>
> I've been thinking about learning C++ for some time now, but that's a long
> term project that I will not be able to begin in the near future. I know
> that there's a lot of resources around the web on the topic, but it's
> difficult to find simple explanations that could satisfy what I believe is
> a slightly "basic" question. It's like wanting to understand the basic
> principles about boiling liquid, without necessarily studying how molecular
> phase transition works.
>
> So, I'd like to ask if anybody can help me shed some light or at least
> point out some resources with a basic explanation about why some functions
> cannot be overridden, both from "choice" (from the Qt and C++ perspective)
> and from "architecture" (due to the sip binding).
>
>
> Thank you,
> Maurizio
>
> --
> È difficile avere una convinzione precisa quando si parla delle ragioni
> del cuore. - "Sostiene Pereira", Antonio Tabucchi
> http://www.jidesk.net
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20210828/be652050/attachment.htm>
More information about the PyQt
mailing list