Os sinais today777 -e slots são um dos conceitos fundamentais do Qt. Eles permitem que você conecte objetos entre si para que possam se comunicar e interagir.
Sinais
Um sinal é um evento que é emitido por um objeto quando ocorre uma determinada ação. Por exemplo, um botão pode emitir um sinal de "clique" quando é clicado.
Para criar um sinal, você deve primeiro declará-lo na classe do objeto que o emitirá. Você faz isso usando a palavra-chave `signals`:
```cpp
class MeuObjeto : public QObject {
Q_SIGNALS:
void clique();
};
```
Depois de declarar o sinal, você pode emiti-lo usando a função `emit()`:
```cpp
class MeuObjeto : public QObject {
Q_SIGNALS:
void clique();
public:
void emitirClique() {
emit clique();
}
};
```
Slots
Um slot é uma função que é chamada quando um sinal é emitido. Slots são definidos nas classes dos objetos que os receberão.
Para criar um slot, você deve primeiro declará-lo na classe do objeto que o conterá. Você faz isso usando a palavra-chave `slots`:
```cpp
class MeuObjeto : public QObject {
Q_SLOTS:
void onClique();
};
```
Depois de declarar o slot, você pode conectá-lo a um sinal usando a função `connect()`:
```cpp
class MeuObjeto : public QObject {
Q_SLOTS:
void onClique();
public:
void conectarSinal() {
connect(meuObjeto, &MeuObjeto::clique, this, &MeuObjeto::onClique);
}
};
```
Exemplo
Vamos criar um exemplo simples para ilustrar os conceitos de sinais e slots. Criaremos um botão que, quando clicado, emitirá um sinal que será recebido por um slot em outro objeto.
Classe do botão:
```cpp
class MeuBotao : public QPushButton {
Q_SIGNALS:
void clique();
};
```
Classe do slot:
```cpp
class MeuObjeto : public QObject {
Q_SLOTS:
void onClique();
public:
void conectarSinal(MeuBotao botao) {
connect(botao, &MeuBotao::clique, this, &MeuObjeto::onClique);
}
void onClique() {
// Código que será executado quando o botão for clicado
}
};
```
Código principal:
```cpp
int main(int argc, char argv[]) {
QApplication app(argc, argv);
MeuBotao botao;
MeuObjeto objeto;
objeto.conectarSinal(&botao);
botao.show();
return app.exec();
```
Neste exemplo, quando o botão for clicado, o sinal `clique()` será emitido. Este sinal será recebido pelo slot `onClique()` no objeto, que executará o código nele contido.
Conclusão
Os sinais e slots são um mecanismo poderoso para comunicação entre objetos no Qt. Eles permitem que você crie aplicativos altamente modulares e responsivos. Ao entender como usar sinais e slots, você pode desenvolver aplicativos Qt mais eficientes e fáceis de manter.