Revista Do Linux
 
  
EDIÇÃO DO MÊS
Somente para assinantes
 Capa
 Entrevista
 Estudo de Caso
 Especial
 Software
 Hardware
 Filosofia
 Banco de Dados
 Programação - QT
 Programação - TCL
 

Desenvolvendo com QT 3.0

Qt é uma biblioteca C++ que herda desta linguagem de programação sua enorme eficiência. A rapidez com que o projeto KDE tem evoluído nos últimos anos é um testemunho de sua produtividade, já que o KDE é desenvolvido em Qt. Mas a grande contribuição da biblioteca Qt é sua portabilidade: Uma vez desenvolvido o código fonte, portar o aplicativo desenvolvido para uma nova plataforma é uma simples questão de recompilá-lo nesta nova plataforma. Já existem scripts para instalação da biblioteca Qt em mais de duas dezenas de plataformas, incluindo Solaris e SunOS, IBM AIX, FreeBSD, HP-UX, IRIX da Silicon Graphics, Linux e, inclusive, Windows.

A revolução chega a sua maioridade: Qt-3.0

A versão 3.0 da biblioteca Qt traz inúmeras novidades que seguramente serão muito bem recebidas pelos programadores e uma revolução: o Qt Designer 2.0.

Talvez a maior novidade do Qt-3.0 seja o módulo SQL que permite o acesso multi-plataforma a banco de dados SQL. A API está de acordo com o padrão SQL sendo, portanto, independente do Banco de Dados a ser acessado; a nova QLibrary permite a incorporação em runtime de bibliotecas compartilhadas. A utilização de Plugins está muito mais simples de ser implementada.

Qt Designer é a interface visual de programação para o ambiente Qt. Certamente, a edição de código fonte e o suporte visual ao desenvolvimento de aplicativos para Bancos de Dados facilidades ausentes nas versões anteriores e que eram os maiores entraves à produtividade destas versões terão o maior impacto para a utilização profissional do Qt.

O que você precisa saber

Para ter domínio da programação Qt você precisa ter conhecimento básico de C++ e programação orientada a objetos. Não possui? O Qt é uma boa maneira (e ótima desculpa...) de você começar esta aventura de aprendizagem.

Instalando o Qt e o Qt Designer

O Conectiva 6.0 vem com a biblioteca Qt 2-2.2.1 instalada e o Conectiva 7.0 vem com a Qt 2-2.3.1. Se você não fez a instalação completa dos aplicativos de desenvolvimento, faça-a assim que puder! Excelente oportunidade para explorar os aplicativos de desenvolvimento no ambiente Linux! Para saber qual a biblioteca Qt que está instalada em seu Linux digite no terminal rpm -q qt1 qt2 qt3. Você deve receber a informação de que não possui o Qt-3.0 instalado em seu Linux. Vamos, portanto, baixá-lo do site da Trolltech: www.troll.no. Leia as informações do site e vá para área de download. Baixe o arquivo qt-x11-free-3.0.0.tar.gz (ou outro de uma versão mais nova do Qt. A velocidade de evolução da biblioteca é impressionante. Todo mês saem versões mais atuais).

Após o download copie o arquivo para o diretório /usr/local/ e descompacte-o. Você terá um diretório /usr/local/qt-x11-free-3.0.0-beta2 em seu micro. Como o nome do diretório é muito grande, aproveite e crie um atalho denominado qt3 apontando para ele. Vá ao diretório /usr/local/ e digite o seguinte comando ln -s qt-x11-free-3.0.0 qt3. Assim, a partir de agora vamos considerar que /usr/local/qt3 é um atalho para o diretório onde será instalada a biblioteca Qt-3.0.

Bem, agora precisamos avisar ao seu micro quais são os caminhos (PATH's ...) para a biblioteca que queremos compilar. Há várias formas de fazer isto!

Se você deseja modificar os PATH's apenas na sessão em que está trabalhando, digite os seguintes comandos no terminal:

    QTDIR=/usr/local/qt3
    PATH=$QTDIR/bin:$PATH
    MANPATH=$QTDIR/doc/man:$MANPATH
    LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

Quando você reiniciar uma nova sessão para trabalhar com a biblioteca Qt-3.0, terá que repetir estes quatro comandos. Caso utilize a distribuição Conectiva e deseja que todos os usuários de seu micro utilizem a biblioteca Qt-3.0 sem necessidade de repetir estes comandos em toda sessão, basta seguir os seguintes passos:

1.Vá para o diretório /etc/profile.d/. Aí estão os scripts de inicialização de seu perfil de usuário padrão;

2.Faça uma cópia do arquivo qt2.sh: Digite simplesmente cp qt2.sh qt3.sh.

3.Para que o arquivo qt3.sh configure corretamente suas variáveis de caminho, basta editar a primeira linha deste arquivo. Ela especifica o diretório onde será instalada a biblioteca Qt. Se você criou o atalho corretamente, esta primeira linha deve ter o seguinte conteúdo:

QTDIR=/usr/local/qt3

4.Reinicialize seu computador para ativar os PATH's

Os mais experientes estarão rindo neste momento! Claro que não é necessária tanta brutalidade, mas este é um artigo para iniciantes! Caso tudo esteja correto, o caminho para a biblioteca Qt-3.0 foi adicionada à variável de caminho do sistema. Para verificar, digite echo $PATH. Você deverá verificar que o diretório /usr/local/qt3/bin foi acrescentado à variável PATH. Assim, estamos prontos para iniciar a compilação da biblioteca Qt-3.0.

Compilando a biblioteca Qt

Antes de preparar a compilação, vamos verificar as opções de compilação. Digite ./configure --help a partir do diretório /usr/local/qt3.

No Conectiva 6.0, ao contrário do 7.0, não há suporte à renderização X. Assim, é necessário configurar a compilação com a opção compatível. Neste caso, digite ./configure -no-xrender. Se quizer, verifique também a opção de instalação com suporte à leitura integrada de arquivos .gif adicionando a opção -qt-gif. Se for utilizar o suporte GIF verifique o alerta sobre licença de uso no arquivo /usr/local/qt3/src/kernel/qgif.h.

Se você não souber se sua distribuição possui suporte à renderização X, tente diretamente a configuração padrão digitando ./configure. Ela transcorre sem dificuldades, por exemplo, no Conectiva 7.0. Em caso de erro de configuração, verifique qual o arquivo que gerou o erro e veja se existe a opção de configuração para evitá-lo.

Para compilar a biblioteca Qt em qualquer uma destas plataformas, basta configurá-la corretamente para a plataforma desejada. A compilação de teste realizada em uma estação Ultra 10 com o Solaris e o compilador gcc transcorreu sem nenhum intercurso. Bastou configurar as variáveis de ambiente corretamente (o padrão na máquina testada era o interpretador de comando csh) e realizar a configuração para compilação com a opção:

./configure -platform  solaris-g++

A compilação durou um terço do tempo gasto pelo PC Intel Pentium III 550 Mhz.

A configuração demora alguns minutos, aguarde. Caso a configuração transcorra sem problema, podemos iniciar a compilação. Digite gmake. Este comando iniciará a compilação da biblioteca Qt, os exemplos e os tutoriais. Aguarde! A compilação pode demorar algo em torno de duas horas em um PIII 550 Mhz. Vale a pena aguardar! Caso tudo transcorra sem intercorrências, sua biblioteca Qt estará instalada e o Qt Designer pronto para ser utilizado!

Vamos conhecer a interface gráfica para programação visual C++ do Qt. Para acessá-la, qualquer usuário poderá digitar designer no terminal. Você pode se certificar da versão instalada acionando o Help/About. Durante o desenvolvimento de um projeto, você deverá ter uma imagem como a da Figura 1.

Programadores acostumados a outras ferramentas de programação visual reconhecerão imediatamente diversas ferramentas presentes na barra de ferramenta. Aqueles que já utilizavam a versão anterior notarão as três novas ferramentas de banco de dados, além de alguns novos ícones na barra de ferramentas.

Para conhecer as ferramentas disponíveis, basta parar com o ponteiro do mouse sobre cada ícone da barra de ferramentas, que uma etiqueta com a especificação da ferramenta aparecerá. Uma informação mais detalhada poderá ser obtida clicando o botão de solicitação de informações, identificado por uma seta e um sinal de interrogação. Aparecerá um sinal de interrogação acompanhando o ponteiro do mouse. Você poderá então clicar sobre qualquer ferramenta para conhecer sua funcionalidade. Uma referência completa sobre os botões pode ser encontrada no Manual do Qt Designer que pode ser acessado através das teclas M, ou diretamente pelo menu Help|Manual.

Vamos fazer nosso primeiro programa no Qt Designer. Será uma interface de conversão de números decimais, para binário e hexadecimal. O formulário final em tempo de execução está na Figura 2.

Passo 1: Iniciando um projeto

Inicialmente, vamos criar um projeto. Na ferramenta de arquivos, clique no botão de criar novo arquivo. Na janela de diálogo que se abre, faça a opção C++ Project. Lembre-se de criar um diretório para cada projeto, o que você poderá fazer diretamente na caixa de diálogo “Project Settings”. Basta clicar no botão identificado pela reticências ... para entrar em um diálogo tipo “Save As” e criar o diretório de sua escolha. A seguir, dê um nome com extensão .pro ao seu projeto e salve-o clicando OK. Uma vez criado o projeto, o Qt Designer irá organizar todos os arquivos e imagens no diretório do próprio projeto!

Para criar o formulário de nosso projeto, volte à ferramenta para criar novos arquivos. Note na parte superior do diálogo que o arquivo será adicionado ao projeto recém criado. Note também que há vários tipos de formulários e opções de código fonte. Escolha o padrão “Dialog” e click OK. O Qt Designer abrirá um formulário vazio, chamado “Form1”, onde você poderá programar o seu aplicativo.

Na área de trabalho do Qt Designer, além do formulário, você terá três janelas com os seguintes nomes e funções:

  • File Overview => Apresenta os arquivos e subdiretórios do projeto;
  • Object Explorer => Apresentam os objetos (ou Widgets ) e a hierarquia deles. Na folha denominada Source estão os slots e as declarações de variáveis e de classes;
  • Properties editor => Editor de propriedades dos objetos.

    Estas janelas podem ser minimizadas com um simples click em sua barra superior. Ela ficará então minimizada em uma “quase imperceptível” barrinha dupla de um centímetro entre a barra de ferramentas e a barra de Menus. Para restaurá-la novamente, clique nesta barrinha dupla.

    O editor de propriedades permite a edição dos valores assumidos por cada propriedade dos objetos. Vá à propriedade name e altere o nome do formulário para Form. Vá até a propriedade caption e altere seu valor para “Primeiro Programa”. Note que caption se refere à identificação do programa na parte superior da janela do formulário, ao passo que name é o nome interno do objeto. No código fonte C++, o objeto deverá ser referenciado pelo seu nome interno!

    Salve o projeto. Note que o Designer terá criado dois arquivos denominados Form.ui e Form.ui.h que estarão listados na janela de File Overview.

    Passos 2: Incluindo objetos

    Vamos agora incluir objetos ao nosso formulário. Siga os passos descritos, visando implementar o formulário da Figura 2.

    Inclua o quadro com botões de opções. Na área de Conteiners, selecione o Quadro de Botões (Button Group) e insira no formulário. Altere a proriedade title para Opções. Insira três botões de opção (Radio Button) no quadro Opções e altere a propriedade text para Dec, Hex e Bin, respectivamente. Desta forma estaremos interligando os três botões, de forma que o acionamento de um automaticamente desativa o anterior! Edite ainda a propriedade checked do botão Dec para TRUE, assim este botão estará ativado na inicialização do aplicativo. Insira ainda um display de número LCD e um potenciômetro tipo slider.

    Ao inserir os objetos, você poderá posicioná-los e dimensioná-los como quizer.

    Passo 3: Conectando Slots e Sinais

    Sinais e Slots são os eventos e métodos do ambiente Qt. Eles permitem o acionamento e a comunicação entre os objetos de seu aplicativo.

    Para fazer com que um objeto envie um sinal a outro, utiliza-se a ferramenta conector Slot/Signal, identificada pela barra azul e vermelha no grupo de ferramentas básicas. Ative a ferramenta. Clique no objeto que envia o sinal (Signal) com o botão direito do mouse e, sem desapertar o botão, arraste o mouse até colocar o ponteiro do mesmo sobre o segundo objeto, aquele que receberá o sinal (Slot). Um retângulo rosa identificará cada objeto selecionado! Quando você soltar o botão do mouse, o Qt Designer abrirá uma janela de diálogo para editar a conexão.

    Seguindo este procedimento, faça a conexão entre o potenciômetro slider e o display LCD. Queremos que o potenciômetro envie um número para o LCD. Na janela de diálogo você pode observar duas listas, uma para os sinais (do Slider) e outra para os slots (do LCD Number). Na lista de sinais selecione o sinal valueChanged(int) e na lista dos slots, a opção display(int). Assim, as alterações de posição do botão do potenciômetro serão mostradas pelo LCD. Clique OK e sinais e slots estarão implementados!

    Conecte agora os botões de opção (signals) ao LCD (slots). Queremos que quando o botão está ligado (toggled) o modo do LCD seja definido como decimal (setDecMode()), hexadecimal (setHexMode()) ou binário (setBinMode()).

    Pronto, seu aplicativo está concluído! Para verificar o resultado tecle T ou vá ao menu Preview e selecione um dos ambientes gráficos para visualizar o programa em tempo de execução. Como utilizamos apenas Sinais e Slots pré-definidos, o programa estará inteiramente funcional. E não editamos uma única linha de código!

    Qt-Designer 2.0

  • Gerenciamento de projetos de desenvolvimento;
  • Edição direta do código fonte dos slots e métodos desenvolvidos pelo próprio usuário;
  • • Criação automática de janela principal (Main Window) com ações, barra de tarefas e menus pré-definidos pelo usuário;
  • Suporte a Plugins que permite a incorporação de qualquer Objeto ou Plugin desenvolvido pelo próprio usuário dentro do Qt Designer, possibilitanto inclusive sua visualização dentro do “Preview”- característica inédita do Qt Designer, já conhecida dos usuário de versões anteriores;
  • Criação dinâmica de diálogos e janelas pop-up;
  • Habilidade para compartilhamento dinâmico de pixmaps em todas as janelas do aplicativo;
  • Drivers para suporte dinâmico à implementação de Banco de Dados em ODBC3, Oracle8.0, MySQL3 e PostGreSQL7.

    Ulisses Leitão
    ualeitao@brhs.com.br


  • A Revista do Linux é editada pela Conectiva S/A
    Todos os Direitos Reservados.

    Política de Privacidade
    Anuncie na Revista do Linux