• Nenhum resultado encontrado

6. A implementação do sistema

6.4. Criando os formulários do caso de uso

6.4.4. Interação com o usuário

Depois de pronto o formulário, com layout definido e com todos os widgets nomeados, deve-se pensar nos eventos que deverão ser tratados pe- lo formulário. Alguns eventos como minimizar, maximizar, redimensionar deverão ser tratados pela própria biblioteca Qt, a não ser que seja necessá- rio algum tratamento especial. Porém, ao clicar no botãoAdicionarserá necessário ter um código diferenciado para que seja acrescentada uma for- ma de pagamento à lista. A codificação do evento propriamente, será feita no KDevelop, mas no Designer é possível dizer pelo menos o caminho a tomar quando ocorrer algum evento.

O Qt trabalha com um mecanismo para tratamento de eventos que ele denomina de signal and slot, onde um widget, ao receber um evento, emite um sinal que pode ser interceptado por outros widgets através de um slot. Tanto o signal como o slot são métodos especiais implementados na classe que representa o widget. Na verdade, este mecanismo não serve apenas para tratamento de eventos, mas para fazer uma troca de mensagens entre classes sem que uma conheça a estrutura da outra.

Para fazer com que um widget responda a um sinal emitido por ou- tro, deve ser implementado um slot na classe e, ao instanciar a classe, o signal que deve ser capturado deve ser conectado ao slot criado na clas-

se. É assim que a classeQListaFormaPagtoresponderá aos cliques nos botões acrescentados na interface. Para maiores informações sobre o meca- nismo signal and slot, recomenda-se a leitura de [QTMANUAL]. A partir de agora o Designer será instruído a fazer essas conexões.

Para iníciar, será informado como o formulário irá responder ao cli- que do botão Fechar. Obviamente, ao clicar no botão fechar, deseja-se que a janela se feche e a escolha por iniciar com este botão foi para mostrar um fato: existem alguns slots implementados internamente pelo Qt para os widgets. Para fazer a primeira conexão (clicar em Fechar = Fechar a janela) deve-se selecionar o menuEdit−→Connections. Uma caixa de diá- logo como a da Figura 6-14 é aberta mostrando uma lista com as colunas mostradas na Tabela 6-2.

Tabela 6-2. Conexsão signal/slot

Coluna Descrição

Sender Indica o widget que emite o sinal.

Signal Qual o sinal deverá ser capturado.

Receiver Indica qual o widget que vai

receber o sinal

Slot Qual o slot será processado quando o sinal for capturado

Manipulando a lista de conexões, pode-se perceber que os mesmos sinais podem ser conectados a tantos slots quanto forem necessários. Dessa forma, se houverem vários widgets dependentes de um outro, esse mecanis- mo pode ser usado para atualizar os diversos widgets dependentes. Primei- ramente será feita a conexão do sinalclicked()do widgetbotaoFechar com o slot close() do widget QListaFormaPagto. Resumindo, está sendo informado que, quando o botãoFecharfor pressionado, o método close() do formulário (representado pela classe QListaFormaPagto) deverá ser executado.

Para fazer a conexão, clique no botão New. Na coluna Sender vai ter uma lista com todos os widgets disponíveis no formulário (daí a im-

portância de dar nome a todos os widgets). Na coluna Sender escolhe-se o widgetbotaoFechar; na coluna Signal é escolhido o sinal clicked(); na coluna Receiver escolhe-se o widgetQListaFormaPagtoe na coluna Slot, seleciona-se o slotclose(). Se o formulário for visualizado agora o botão Fechar vai funcionar corretamente, porque ele está conectado a um slot implementado pelo Qt.

Figura 6-14. Designer - conectando signal e slot

Para os outros botões, deverá haver um procedimento personalizado, pois o Qt não sabe o que fazer para manipular formas de pagamento. O Designer pode deixar definidos os slots que deverão ser usados ao clicar nos botões do formulário. Agora será mostrado em detalhes a conexão do botão Adicionar. Na coluna Sender escolhe-se botaoAdicionar; na coluna Signal escolhe-se clicked(); na coluna Receiver a opção QListaFormaPagto. Agora vem a personalização: criar um novo slot.

A criação de um novo slot é uma tarefa muito simples. Na janela de conexões, deve-se clicar no botão Edit Slots. Uma segunda caixa de

diálogo como a da Figura 6-15 aparece com uma lista que deverá conter os slots personalizados. Para criar um novo slot, deve-se clicar no botão New Function. Nesse momento, os campos abaixo da tela serão disponibilizados para que sejam digitados os dados do novo slot. No campo Function deve ser digitadoadicionare os outros campos, são deixados como sugerido. Depois clica-se em Ok. Ao voltar, o slot criado vai aparecer na lista e então ele deve ser selecionado para confirmar a conexão.

Da mesma forma, pode-se criar os slots para os outros botões. Deve-se criar então o slot modificar() para associar ao botão botaoModificar, o slot apagar() para associar a botaoApagar e o slotatualizar()para associar abotaoAtualizar.

Figura 6-15. Designer - incluindo novos slots

Depois de criados os slots pode-se perceber uma particularidade: os seus nomes correspondem às mensagens trocadas pela classe KListaFormaPagto no diagrama de seqüência Manter cadastro de formas de pagamento. Isto porque obviamente deve haver coerência

entre o modelo e a implementação. Depois de criados todos os slots deve-se fazer a conexão com os respectivos widgets.

Finalmente, o formulário QListaFormaPagto está pronto para a codificação, ou seja, a interface está pronta, faltando apenas implementar os slots que foram criados.

Documentos relacionados