Capítulo 4. Criando KDE Widgets Customizadas

David Sweet

translator: Huberto Gastal Mayer

Até o momento você já deve ter uma boa idéia de como é simples programar para o KDE e quanto a QT tem a oferecer. Agora olharemos mais detalhadamente o desenvolvimento de blocos de GUIs: os Widgets. Embora KDE e QT ofereçam muitos widgets úteis e poderosos, você pode precisar criar seus próprios widgets para customisar seu UI. É fácil de fazer isso? Qual é a melhor forma?

Princípios de Widgets

Widgets são elementos gráficos para interação com o usuário. Os widgets simples podem ser controles ou indicadores tais como pushbuttons (botões) ou text labels (etiquetas de texto). Widgets mais complexos podem executar uma computação mais complexa ou podem requerer intervenções do usuário mais significativas, como spell checker widget (widget verificador ortográfico) ou HTML-rendering widget (widget renderizador de HTML).

No KDE, os widgets são criados usando-se classes de C++. Geralmente há uma semelhança do nome do widget ao de sua classe correspondente. Por exemplo, um push-button é implementado por QPushButton. Todos os widgets são derivados da classe base QWidget.

Compreendendo a Classe Base QWidget

QWidget controla eventos do sistema de janelas, maneja atributos genéricos do widget, sabe quem são widgets pai e widget filho e controla as funções originais de um widget de alto nível (top-level widget, se for um). Eventos de sistema de janelas incluem mudanças de geometria e intervenções de usuário. O widget é preso dentro de uma área limitada pelas beiras de seu widget pai e pelos widgets filhos colocados acima dele. Os widgets de alto nível (top-level) não têm nenhum pai. Encontram-se numa janela no desktop e tem beiras e decorações desenhadas pelo gerenciador de janelas.

Eventos de Sistema

Os eventos do sistema de janelas informam ao widget quando este precisa repintar-se (repaint), reposicionar-se ou redimensionar-se quando os cliques do mouse estiverem direcionados `ele, quando o widget recebe ou perde o foco, e assim por diante. QWidget maneja os eventos chamando um método virtual para cada evento. Cada método começa passando, como um argumento, uma classe que contém a informação sobre o evento. Para manejar o evento, o método correspondente deve ser reimplementado na sub-classe de QWidget.

Um evento de sistema muito importante é o evento da pintura (paint event). Em resposta à este evento, um widget desenha (ou "pinta") em si próprio. Este evento é emitido ao widget cada vez que o widget necessita ser mostrado ou remostrado. Por exemplo, um evento é emitido quando o widget é criado primeiramente, quando é mostrado após ser escondido, ou quando está sendo mostrado logo após ter sido descoberto inteiramente ou obscurecido parcialmente. O evento da pintura (paint event) será discutido em detalhes na seção seguinte, e as técnicas para repintar eficientemente serão discutidas no Capítulo 9.