A Passarola::Derivação de classes e reimplementação de métodos emC++\Qt

Este widget que acabei de construir visa essencialmente ajudar a exemplificar a derivação de uma classe base, alterando o seu comportamento original. Tal será conseguido pela inclusão de novas funcionalidade, bem como pela reimplementação de alguns métodos.

Como a linguagem\framework com que estou mais familiarizado é a dupla C++\Qt, este será o suporte utilizado para esta explificação.

A classe base

O Qt é formado por uma hierarquia de classes que estabelecem entre si diversos mecanismos de herança.

No nosso exemplo vamos criar um widget que irá herdar a classe QWidget, mediante um mecanismo de herança pública.

De forma a conhecermos melhor os objetos desta classe podemos:

  • consultar a sua referência, que irá depender da versão;
  • consultar uma diagrama de classes, que tive mais dificuldade em encontrar, tal como este;
  • procurar alguns exemplos online.

Sendo QWidget a classe base, e depois de consultada a informação acima mencionada, passemos então à sua derivação (subclassing).

A classe derivada (desenho.h)

Com um pouco de imaginação, acabei por construir um widget que permite movimentar um barquinho, numa paisagem integralmente desenhada pelos membros da classe derivada.

A ideia consiste em fazer soprar o vento nas várias direções, de forma a mover a”Passarola” ao longo do cenário.

O cenário, com o tamanho fixo de 800×600, foi a minha que encontrei para demonstrar que um widget pode ser completamente redesenhado.

A definição da classe é a seguinte.GtWidget

Reimplementação de um método (paintEvent)

Como estamos a falar de herança, QPainter é uma classe que pode ser utilizada em todos os objetos que derivam da QPaintDevice, como é o caso do nosso QWidget.

Esta classe realiza tarefas de desenho em widgets e outros dispositivos. Por esta razão, se eliminarmos do código todos os elementos adicionais, ficamos com uma janela vazia, que corresponde ao desenho inicial do nosso widget.

Todas as funções de desenho ocorrem a partir do método draw.

Juntando tudo

De forma a dar vida ao cenário, é criada outra classe (GtWidget), responsável por integrar todos os elementos e interagir com o “jogo”.

Ora aqui está uma forma diferente de desenhar!

Podem obter o código fonte aqui.

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s