Qt signal (event source) and slot (event receiver function) mechanism is funky, but not crap. For one thing, it works across threads just fine.
The documentation issue is that there are multiple ways of referring to these, and there are differences here between major versions of Qt. There are some significant differences in the details between minor versions, so being very anal about the version being referred to is important. Annoying, yes, but important. Are you using Qt 6.8 or some other version? I admit, I still prefer Qt 5 (5.12 to 5.18).
Because the slots can be overloaded –– different handler for different parameters –– you need to specify the prototype for the target slot when connecting. If you use the string-based format (using
SIGNAL() and
SLOT() macros), it will be resolved at runtime; the functor (aka function pointer) based format (using
&Class::signalName and
&Class::slotName) is resolved at compile time.
You'll also see a lot of C++ lambda functions that capture the context variables by value, using the format
[=](){ function body }.
I avoid the mess by writing the code myself, and only using Qt Creator to provide me with the user interface description file. I do prefer the
QUiLoader (XML) approach over the
QML, though. Both can be used with Qt Creator, the trick is that you don't let it generate any UI C++ code for you; the initial skeletons only, perhaps.
Automatic association of member functions to slots is based on
QMetaObject::connectSlotsByName(), which looks at your main class, and connects any member functions named
on_objectName_signalName to the signal
signalName of UI object with name
objectName. You do not have to use it, you can also do it yourself (
connect(widget,&widgetClass::signalName,receiver,&class::method), with
receiver typically being the your main class instance
this you do the connections in), for example when you have many objects with signals connecting to the same handler function.
When I first started using Qt, Qt Creator confused many things. So, I did some UIs with my own code only, including creating the UI widgets at run time. This helped me understand the widget hierarchy, and later use Qt Creator to help with my workflow, instead of forcing me to the workflow the Qt Creator developers where thinking of when creating the tool.
I can definitely relate to the frustration (even though not to the claim that this makes it utter shite), but I'd suggest doing some real (but not too complicated) UIs first in plain C++, perhaps on your workstation, avoiding Qt Creator, to understand how the toolkit works at the code level. It did that for me, at least. Then again, I have always used whatever time I needed to truly
grok the thing, not respecting any deadlines others may have given me...