Signals and slots are like direct links. It's an event system where a signal will pass its arguments to the connected slot. It's similar to python and probably the most peculiar feature of QT.
The Signal slots paradigm makes GUI desing a lot simpler. Something happens->do something else. They are also thread safe for good measure.
Internally QT will translate signals slots and connect in real C++ code in meta C++ files before the real compilation begins.
Here I added a slot to the main class. It's a public method with a macro definition used by QT for his translation into real C++ code.
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
public Q_SLOTS:
void txt_update( int num );
private:
Ui::MainWindow *ui;
};
The slots take care of writing an integer inside a line controlvoid MainWindow::txt_update( int num ) { User::Qt_utils::qline_show_int( ui ->txt, num ); }I have an object with a signal. The signal too is public and declared as macro.class Sender : public QObject { Q_OBJECT public: Sender(); Q_SIGNALS: void send( int num ); };Here is the code inside the constructor of the main window.I create the sender object.I call directly the slot to update the control and initialize it.I connect the sender output with the slot input.I call the sender object which will pass it's argument to the slot automagically!//I can call a slot directly //This slot is set to update the txt control wint an integer when called this -> txt_update( 0 ); //QT will actually add more c++ files to handle signals and slots in real C++ code //Connect the signal coming from the sender class to the slot of the Main Window class //singal and slot must have same arguments in this style of connect connect ( &my_tx, //Reference to source signal object &Sender::send, //Reference to the source signal method. It's just the definition and it's not tied to the individual object. this, //Reference to the dest slot object. In this case I use the current class instance &MainWindow::txt_update //Reference to the dest slot method. It's just the definition and it's not tied to the individual object. ); //I can send a signal by simply calling the method directly //This will cause the slot of the main class to be activated with the same argument of the sender signal my_tx.send( 17 );
No comments:
Post a Comment