Qt5 Signal Slot Connection
PyQt5 signals and slots Graphical applications (GUI) are event-driven, unlike console or terminal applications. A users action like clicks a button or selecting an item in a list is called an event. If an event takes place, each PyQt5 widget can emit a signal. Signals and Slots Across Threads. Qt supports these signal-slot connection types: Auto Connection (default) If the signal is emitted in the thread which the receiving object has affinity then the behavior is the same as the Direct Connection. Otherwise, the behavior is the same as the Queued Connection.' Direct Connection The slot is invoked.
Qt5 Signal Slot Connection Booster
Signals and slots are used for communication between objects. The signals and slots mechanism is a central feature of Qt and probably the part that differs most from the features provided by other frameworks. The minimal example requires a class with one signal, one slot and one connection: counter.h. @JonB said in Can a signal call a non-slot method: @SGaist. Nothing Qt 5 specific, these macros have the same functionality since the beginning. Before Qt5 signals was protected, now it is public (to allow new connection syntax). That was why I wrote Qt5+.
Hi,
I want to connect some signals to some slots in an application of mine. In this very situation, this does NOT work when the connection is established in the constructor, but is DOES work when it is done somewhere later in the program logic (e.g. in a slot called after a button click).
I explain the situation with some example code:
I have a dll that declares a Qt plugin (class MyObject) that inherits from MySignalInterface.
MyObject owns MySubObject, that inherits from MySlotInterface.
Compiling/building/loading the plugin all works fine. When I now want to connect the mySignal from MyObject to mySlot from MySubObject in the constructor of MyObject, the slot is not called when the signal is emitted (I checked that the signal is emitted by setting a breakpoint in the respective moc_MyObject.cpp). When I connect somewhere later (within onButtonPress()), the connection works. There is no output on the command line regarding failed signal/slot connections, and the result value from the call to connect() in the constructor is true.
I don't know how to investigate what is going wrong here with the connections. How to debug this?
Below, some code fragments for clarification. Any help would be appreciated.
I am working on Windows10 with Visual Studio 2015 and Qt 5.10.0.
MyObject.cpp
MyObject.h
MySignalInterface.h
MySubObject.h
MySlotInterface.h
Graphical applications (GUI) are event-driven, unlike console or terminal applications. A users action like clicks a button or selecting an item in a list is called an event.
If an event takes place, each PyQt5 widget can emit a signal. A signal does not execute any action, that is done by a slot.
Related course:
Create GUI Apps with PyQt5
Signals and slot introduction
Consider this example:
The button click (signal) is connected to the action (slot). In this example, the method slot_method will be called if the signal emits.
This principle of connecting slots methods or function to a widget, applies to all widgets,
or we can explicitly define the signal:
PyQt supports many type of signals, not just clicks.
Example
We can create a method (slot) that is connected to a widget. A slot is any callable function or method.
Qt5 New Signal Slot Connection
On running the application, we can click the button to execute the action (slot).
Qt5 Signal Slot Connection Adapters
If you are new to programming Python PyQt, I highly recommend this book.