I am starting out with Qt and think I have grasped the basic concepts such as signals and slots for conveying events such as button clicks from the GUI controls to my main application class. However I am not sure if I am trying to invent usages of signals/slots where they are just not appropriate and where a direct method call would be more appropriate.

I have a fairly complex GUI with QComboBox, QTabWidget, etc controls. Some of these widgets contents depends on the state of other widgets. All of these widgets are children of my main window class.

If I want to handle say the switching of application context due to the QTabWidget changing then I use the signal/slot mechanism to connect the currentChanged() signal from the QTabWidget to the slot method in my main class that will handle the actions required on the tab contents changing. That situation is onviously a signal/slot usage.

However I have other widgets on the GUI whose state must change as a result of say the QTabWidget changing. These controls can also change by user interaction. For example, I have a QComboBox whose contents depends on the QTabWidget selection. The state of several other QCheckBox widgets however depends on the QComboBox widget. For this I set the activated() signal of the QComboBox to call a slot method in my main class that sets the state of the QCheckBox widgets appropriately. Again this to me is a signal/slot usage no question. The QComboBox widgets contents is again updated as a result of the currentChanged() signal from the QTabWidget. However as a result of setting the QComboBox I now need to change the QCheckBox widgets. The signal/slot parameters do not allow me to simply chain the slots from the original QTabWidget change onto both the QComboBox and then the QCheckBox widgets.

One way of handling this I thought of was to emit a signal from the QComboBox initiated slot member, which then is connected to the QCheckBox slot member to set their state. I also added a "shim" member between the standard QCheckBox widgets clicked() signals to re-emit the same signal I use from the QComboBox slot so that one slot function ends up doing the common work, with the "shim" slot function only there to get the signal parameters I need from both sources, Is this reasonable?

I have done the above in several places now within my main window class, effectively emitting signals internal to my class, connected to slots within the same class. Should I really be using signals/slots in this way or am I just inventing unnecessary usages of signals and slot where in fact a direct method call from one class member to another member member of the same class would be more appropriate.

I can sort of see advantages both ways. Speed possibly for direct method calls. However signals/slots maybe win if I genuinely have an event as a result of which I may want to execute one or more methods, but I don't want to have to explicitly list each method that needs to be called in the code (excluding the connections with connect()), especially if the signal can be emitted from more than one place.

Also is emitting the same signal from more than one place within a single class good practice?

Thanks for any advice/guidance anyone can offer.