The problem: qt doesn't really allow us to use multiple inheritance, but
sometimes it's very desirable to split some logic into a base class, so I
had an idea: why not declare "signals"  before you mark them as signal?
That way base class could directly call pure virtuals and the QObject based
subclass will have  the "signals:"  section that will force moc to
implement these pure virtuals and call the signal magic to actually work.

That way we both have a base class that emits and can inherit  however many
bases we'd like. I've verified that the pattern works for a simple test
case but then I went digging on the internet and while it is mentioned a
few times there'sd a lot of confusion on whether it can work at all(clearly
people who say it's just completely not working  are mistaken as evidenced
from my testing) and whether it is problematic.

Personally, I've delved a bit into the source code of how signal
dispatching works in such cases, but didn't see anything that could
obviously break - we're just figuring out the signal index in the connect()
statement and call that later. But I am also not qualified  enough template
metaprogrammer to say for sure.

An example of someone recommending this pattern (and a code example) but it
is both too simple and has no discussion on it for me to be sure it is
allowed to be used:

https://www.man42.net/blog/2012/05/qt-4-qobject-pure-virtual-signal/

So my question is - is it safe, and is it safe both for qt5 and qt6? Will
something in qt potentially break in non obvious way if this pattern is
used?
_______________________________________________
Interest mailing list
[email protected]
https://lists.qt-project.org/listinfo/interest

Reply via email to