GUI para Linux.

Eu confesso que nunca tinha gostado muito de fazer software com janelinhas, botões, etc. Talvez porque eu tivesse a impressão que as bibliotecas nunca eram enxutas o suficiente ou então não eram muito bem escritas. Pelo menos essa era a impressão que eu tive quando tive que programar algumas coisas nesse sentido há uns 6 anos atrás.
Além disso, meu foco sempre foi mais voltado para o desenvolvimento de software para hardware embarcado, principalmente para aplicações em robótica. Sendo assim, os firmwares que eu escrevi em geral tinham um foco grande no desempenho e na grande maioria das vezes era altamente dependente do hardware.
Contudo, nos últimos dois anos eu passei a trabalhar bastante num nível mais alto de abstração. No meu mestrado eu trabalho com o problema de planejamento de rotas aplicado à robótica móvel e em paralelo participo de um projeto de construção de um helimodelo autônomo para inspeção de linhas de transmissão.
No problema de planejamento de rotas, a visualização foi feita utilizando a biblioteca HighGui do OpenCV. Esta biblioteca é bem simples e, apesar de capturar eventos de mouse e teclado, não possui suporte a botões, caixas de diálogo, etc. Mas para a finalidade que eu queria ela se mostrou suficiente, pois eu precisava apenas mostrar um mapa bidimensional e a rota resultante.
Já no projeto do helimodelo autônomo eu passei a implementar um software para simulação da dinâmica do helicóptero e visualização 3D utilizando OpenGL e SDL. O OpenGL é uma API 3D bastante conhecida e o SDL é uma biblioteca multimídia muito utilizada para desenvolvimento de jogos, principalmente em Linux.
Mesmo utilizando bastantes recursos de computação gráfica e visualização com vários ângulos de visão e entrada de dados através de teclado e joystick, nunca foi necessária a utilização de uma interface gráfica que tivesse botões, caixas de diálogo, menus, etc.
Mas eis que recentemente eu fiquei encarregado de desenvolver um software para comunicação com o helimodelo e interface com um operador humano na estação base. A necessidade de uma interface mais completa se mostrou iminente e eu passei a procurar algo que fosse maduro, robusto, com uma boa documentação e suporte e que de preferência tivesse uma atualização regular.
Comecei achando algumas opções razoáveis, sendo estas três as mais promissoras: GTK+, Agar e QT.
As três são cross-plattform, ou seja, podem ser compiladas em vários sistemas operacionais sem a necessidade de modificação no código. Além disso, possuem uma atualização regular, são maduras, robustas e possibilitam a construção de interfaces bem apresentáveis.
A GTK+ é utilizada no GIMP e no Gnome. Possui um suporte fantástico com uma bela documentação e tem uma comunidade muito grande de usuários. A Agar não tem uma comunidade de usuários tão grande, mas a documentação também é boa. Outro ponto muito forte é que a AGAR foi feita para funcionar com SDL e OpenGL, duas ferramentas que eu conheço bem e gosto bastante. Além disso, em princípio achei a AGAR mais simples de se utilizar e com funções mais diretas (e talvez por isso contenha menos recursos).
Já o QT, além de madura, ter excelente suporte e documentação, foi utilizado no KDE. Além disso, possui excelentes tutoriais em sua página oficial. Existe a integração plena com o OpenGL e realmente bem tranqüila de se utilizar.

As outras opções que eu cheguei a olhar foram:

GiGi - Bem voltada para jogos e pelos screenshots pareceu que é capaz de produzir interfaces bem feitas. Porém o suporte parece ser pequeno e é um projeto que não recebe atualização constante.

PicoGui - O projeto está sendo parado. De qualquer forma, parece um pacote de desenvolvimento relativamente completo.

AedGui - Possui suporte pequeno, a última atualização foi em 2003 e me pareceu bem simples.

GUIlib - É um framework totalmente baseado em SDL e extremamente minimalista. O objetivo do autor do projeto era simplesmente utilizar uma interface gráfica para alguns demos.

Comentários

Postagens mais visitadas deste blog

Programando PIC em Linux: Ferramentas

História de pescador