qt:wiring_up_signals_and_slots
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
qt:wiring_up_signals_and_slots [2011/03/31 15:07] – mithat | qt:wiring_up_signals_and_slots [2011/04/03 13:06] – mithat | ||
---|---|---|---|
Line 2: | Line 2: | ||
===== Creating signal→slot connections ===== | ===== Creating signal→slot connections ===== | ||
- | Qt uses a signals and slots system to process events. If you use Qt Creator for development, | + | Qt uses a [[signals and slots]] system to process events. If you use Qt Creator for development, |
* [[#Create an "event handler" | * [[#Create an "event handler" | ||
* [[#Do it " | * [[#Do it " | ||
Line 10: | Line 10: | ||
If you use Qt Designer with some other IDE for development, | If you use Qt Designer with some other IDE for development, | ||
- | ==== Create an "event handler" | + | ==== The alternatives ==== |
+ | |||
+ | === Create an "event handler" | ||
// | // | ||
Line 16: | Line 18: | ||
A handler you make this way for a '' | A handler you make this way for a '' | ||
- | <code cpp> | + | <code cpp-qt> |
void MainWindow:: | void MainWindow:: | ||
{ | { | ||
Line 23: | Line 25: | ||
The handlers you create this way are actually a private slots. You can confirm this by looking at the header file for the class you are editing: | The handlers you create this way are actually a private slots. You can confirm this by looking at the header file for the class you are editing: | ||
- | <code cpp> | + | <code cpp-qt> |
private slots: | private slots: | ||
void on_button_quit_clicked();</ | void on_button_quit_clicked();</ | ||
- | === Behind the scenes | + | == Behind the scenes == |
How does the build system know that that '' | How does the build system know that that '' | ||
- | <code cpp>< | + | <code cpp-qt>< |
- | == Question | + | = Question = |
If the above is true, then it should be possible to create event handlers just by writing code. Two tests are indicated: | If the above is true, then it should be possible to create event handlers just by writing code. Two tests are indicated: | ||
* Write the handlers manually in Qt Creator. | * Write the handlers manually in Qt Creator. | ||
* Write the handlers manually in a project managed by something other than Qt Creator. | * Write the handlers manually in a project managed by something other than Qt Creator. | ||
- | ==== Do it " | + | === Do it " |
// | // | ||
Line 55: | Line 57: | ||
When you set signal/slot connections this way, you will see arrows connecting widgets indicating signal/slot relationships. | When you set signal/slot connections this way, you will see arrows connecting widgets indicating signal/slot relationships. | ||
- | === Special cases === | + | == Special cases == |
There are a couple special cases that are worth mentioning. | There are a couple special cases that are worth mentioning. | ||
- | == Connecting to the window | + | = Connecting to the window = |
If you want to connect a signal to the slot of a window, just drag onto the window rather than onto another widget. You will know you are connecting to the main window because the slot end of the connector will turn into an electrical earth ground symbol {{: | If you want to connect a signal to the slot of a window, just drag onto the window rather than onto another widget. You will know you are connecting to the main window because the slot end of the connector will turn into an electrical earth ground symbol {{: | ||
- | == Connecting a widget to itself | + | = Connecting a widget to itself = |
You can also connect widgets to themselves. If you do this, you can set up all sorts of hilarity. Sometimes you can even do useful things. | You can also connect widgets to themselves. If you do this, you can set up all sorts of hilarity. Sometimes you can even do useful things. | ||
- | === Editing signals and slots === | + | == Editing signals and slots == |
You can edit existing signal/slot connections made in Edit Signal/ | You can edit existing signal/slot connections made in Edit Signal/ | ||
You can add new relationships and delete existing ones using the **+** and **–** icons. The **–** icon seems a bit temperamental, | You can add new relationships and delete existing ones using the **+** and **–** icons. The **–** icon seems a bit temperamental, | ||
- | === Behind the scenes | + | == Behind the scenes == |
Connections made this way are stored in a form's ''//< | Connections made this way are stored in a form's ''//< | ||
< | < | ||
Line 91: | Line 93: | ||
Note: If you are using Qt Creator to develop your project, the Qt gods discourage you from manually editing '' | Note: If you are using Qt Creator to develop your project, the Qt gods discourage you from manually editing '' | ||
- | ==== Do it in the *.ui file ==== | + | === Do it in the *.ui file === |
// | // | ||
Line 105: | Line 107: | ||
</ | </ | ||
</ | </ | ||
- | ==== Do it in the constructor | + | |
+ | === Do it in the constructor === | ||
// | // | ||
You can explicitly connect signals and slots programatically. This is typically done in a form's constructor. | You can explicitly connect signals and slots programatically. This is typically done in a form's constructor. | ||
- | <code cpp> | + | <code cpp-qt> |
HelloForm:: | HelloForm:: | ||
{ | { | ||
Line 117: | Line 120: | ||
connect(widget.button_quit, | connect(widget.button_quit, | ||
}</ | }</ | ||
+ | |||
+ | ==== Recommendation ==== | ||
+ | While the [[#Create an "event handler" | ||
===== Runtime signal→slot connection modifications ===== | ===== Runtime signal→slot connection modifications ===== | ||
I don't know. But it should be possible. | I don't know. But it should be possible. |
qt/wiring_up_signals_and_slots.txt · Last modified: 2011/04/03 13:14 by mithat