Criando uma aplicação gráfica com o Qt Designer

Neste artigo iremos descobrir como é fácil criar uma aplicação gráfica em C/C++ com o Qt Designer. Também mostraremos alguns truques para resolver problemas comuns de compilação de seus projetos.

[ Hits: 52.586 ]

Por: José Elias em 13/03/2004


Introdução



Uso o Linux há alguns anos, sempre acompanho os seus melhoramentos e que melhoramentos.

Uso atualmente o MDK 9.1 com KDE 3.1, pois pareceu-me mais estável.

Com este, podemos instalar vários ambientes de programação. Em evolução constante, podemos encontrar o Qt Designer. Este é um ótimo gerenciador de projetos em C++.

Problemas


Utilizo a versão 3.1.1, que veio ótima, sem alguns bugs da versão anterior. Ótima até iniciarmos a compilação com o qmake. O Makefile produzido parece não reconhecer os diretórios dos binários nem das bibliotecas.

Programando


Vamos criar um projeto C++ bem simples:
  1. Inicie o Qt Designer.
  2. Selecione "C++ Project" para iniciar um novo projeto. Entre com o nome do projeto em "Project File". Por exemplo, /Projects/qtExample.pro.
  3. Na aba C++, entre com "thread" em Config e clique em Ok.
Pronto! Criamos nosso projeto.

Vá em File > New ou simplesmente clique em Ctrl + N. Será aberta o diálogo New File. Neste, selecione Dialog. Redimensione-o e insira um novo botão "pushButton1". Modifique sua propriedade Text para "Ok".

Clique em Conecct Signal/Slots ou simplesmente pressione F3. Observe que o ponteiro do mouse modificou-se. Clique no botão Ok do formulário. Veja que formou uma áurea em torno do botão. Clique agora no formulário. Surgirá o diálogo View and Edit Connections.


Qt Designer em ação.

Na coluna Signal clique sobre No Signal e selecione Clicked (). Em Receiver escolha o Form1. Vá agora até Slot. Clique sobre No Slot e selecione Close().

Seu programa já está funcional. Clique em Preview > Preview Form. Maravilha, não?

Salve seu formulário de diálogo. Por exemplo, /Projects/frmqt.ui.


Main file.

O próximo passo é criarmos o código básico que irá iniciar nosso formulário. Clique em New > File e escolha C++ Main-File (main.cpp). Clique em Ok e veja que surgirá o diálogo Configure Main-File. Observe que em Main-Form só existe o formulário que criamos anteriormente. Clique em Ok.


Código do arquivo main.cpp.

Seu projeto já está pronto. Sai do Qt Designer. Observe no diretório do seu projeto que foram criados três arquivos:
~/Projects/frmqt.ui    /formulário do nosso projeto 
~/Projects/main.cpp          /código de inicialização do formulário 
~/Projects/qtExample.pro  /nosso projeto 


Compilando


Nossos problemas surgem exatamente quando iniciamos a compilação de nosso projeto. Entre num console e tente compilá-lo:

# qmake qtExample.pro

Tentei tanto como usurário quanto como root, não consigo iniciar o qmake, já que este não se encontra em /bin ou /usr/bin e sim /usr/lib/qt3/bin.

Então vamos até o qmake:

# /usr/lib/qt3/bin/qmake qtExample.pro

Observe que estamos dentro do diretório do nosso projeto. Podemos fazer o comando acima como usuário normal. Será gerado o arquivo:

~/Projects/Makefile

Até aqui tudo bem.

# make

Veja o que acontece abaixo:

/bin/uic frmqt.ui -o .ui/frmqt.h
make: /bin/uic: Command not found
make: *** [.ui/frmqt.h] Error 127

Observe que o executável uic não é encontrado, pois este simplesmente se localiza em /usr/lib/qt3/bin. O que acontece é que o make ao gerar o arquivo "Makefile" não conseguiu encontrar a localização dos executáveis nem das bibliotecas.

O arquivo que inicializa o Qt Designer, designer, está ok. Veja abaixo. Mas, parece não haver exportação dos respectivos paths.

#!/bin/sh
# Support script to properly set environments for Designer to run


export QTDIR=/usr/lib/qt3/
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH=$QTDIR/bin:$PATH

export MOC=/usr/lib/qt3/bin/moc
export UIC=/usr/lib/qt3/bin/uic

exec /usr/lib/qt3/bin/designer-real "$@"

Abra o arquivo "Makefile" e no início do arquivo escreva:

QTDIR = /usr/lib/qt3/

Teremos o problema de localização dos executáveis e das bibliotecas. Mas, ainda teremos alguns erros, pois as bibliotecas lqt-mt deveriam estar em /usr/X11R6 como as lXext, lX11, lm, etc. Veja a linha 22 do Makefile:

LIBS = $(SUBLIBS) -L$(QTDIR)/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread

Veja que as bibliotecas estão apontadas para /usr/X11R6/lib, então, copiei todas as bibliotecas contidas em /usr/lib/qt3/lib, como root, para aquela localização.

# cp /usr/lib/qt3/lib/*.* /usr/X11R6/lib

Agora utilize o comando make. Rode-o como usuário comum:

# make

Pronto! Já tem seu executável. Rode-o:

# ./rdl

OBS: algumas vezes, apesar de termos alterado na aba C++ Config como "thread", essas mudanças não são salvas em rdl.pro. Antes de compilar, de uma observada no código deste arquivo e procure a linha:

CONFIG += thread

Se não estiver assim, altere-a e salve-a.

Comentários ou sugestões serão bem vindos: #

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Introdução à ponteiros em C

Introdução à linguagem C - Parte I

Mais sobre recursividade em C/C++

Introdução à linguagem C - Parte III

Criando uma calculadora com o Glade

  
Comentários
[1] Comentário enviado por fabio em 13/03/2004 - 05:32h

Olá,

Excelente artigo, curti bastante o Qt Designer, já venho ouvindo falar dele faz tempo, mas realmente só agora acompanhando o artigo que tomei coragem para testá-lo. Aqui no Debian Sid (unstable) não tive os problemas de compilação citados. Para ter o Qt Designer instalado só precisei dos seguintes pacotes:

# apt-get install qt3-designer libqt3-dev libqt3-headers

[]'s

[2] Comentário enviado por jeffestanislau em 16/03/2004 - 08:14h

Show de bola, muito interessante esta feramenta...
Parabéns pelo artigo!!!

[3] Comentário enviado por ivandourado em 15/05/2004 - 23:10h

uma vez tentei fazer algo e não consegui. com este artigo vou tentar novamente. acho que agora eu consigo.

[4] Comentário enviado por removido em 31/05/2004 - 01:39h

show este artigo!!! parabens!!
Mto massa o software!

[5] Comentário enviado por LMaster em 14/06/2004 - 15:22h

Excelente artigo cara!!!.... show de bola...
mais contribuições desse tipo deveriam ser expostas aqui...

[6] Comentário enviado por ice2642 em 22/07/2004 - 22:08h

Legal o seu artigo.
muito legal o QT, só por curiosidade, existe uma versão do qt para windows, usando o QT do windows o programa resultante vai precisar o gtk como o gimp para windows por ex ? ou ele vai usar o API do windows ?

[7] Comentário enviado por HunZ em 03/09/2004 - 16:58h

Legal o artigo :)
Legal esse QT..

abraços,
fique com Deus.

[8] Comentário enviado por sucupira22 em 28/09/2004 - 17:05h

POw...tipo eu to começando a mexer com isso...vc por acaso nao teria um tutorial do qtdesigner em português perdido por ae?
valeu

[9] Comentário enviado por waraujobh em 11/11/2004 - 04:03h

O artigo funciona mas as coisas não foram feitas de um jeito muito "marretado".
Para que todos os usuários possam usar o "qmake", basta criar um link simbólico para o mesmo no diretório "/usr/bin" (que deve - e provavelmente está - estar presente na variável de ambiente $PATH dos mesmos; Pra saber qual é o valor de uma variável de ambiente, basta digitar 'echo $[nome da variável]'). O comando fica assim:
%>ln -s /usr/lib/qt3/qmake /usr/bin/qmake
Além disso, copiar as bibliotecas do QT não é uma boa prática de administração. Toda vez que atualizar o QT, terá que copiá-las. Sem falar que, caso pense em removê-las, :-( "No good!"
Precisa é saber o porquê da variável $QTDIR não estar sendo exportada.
Mas de qualquer forma, parabéns pelo artigo. Muito bom pra incentivar o uso do QT. Eu mesmo nunca havia usado antes.

[10] Comentário enviado por slask em 21/01/2005 - 21:10h

Mto bom a artigo! Bem esclarecedor!!

[11] Comentário enviado por lidyon em 23/01/2005 - 09:23h

coloca isso no seu $HOME/.bashrc ou $HOME/.bash_profiles (depende da distro) que as váriáveis derão exportadas quando vc chamar o shell, se o .bashrc
ou .bash_profiles não existir crie-o em seu HOME com esse conteudo (observe que é arquivo oculto , começa com '.'):

export QTDIR=/usr/lib/qt3/
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH=$QTDIR/bin:$PATH

export MOC=/usr/lib/qt3/bin/moc
export UIC=/usr/lib/qt3/bin/uic

[12] Comentário enviado por zezinhorr em 11/06/2005 - 10:29h

muito bom o seu arquivo, espero ver outros com o mesmo assumto

[13] Comentário enviado por Serafim em 14/10/2005 - 16:32h

Legal o seu artigo. Um amigo me falou uma vez que o QT era meio pesadão e tinha alguns problemas, nunca o utilizei, portanto não posso confirmar isso. Gostaria de saber se essa informação procede, pois preciso desenvolver um sistema em Perl e pensei em usar o QT e por conta dessas informações estou pensando em mudar para TK. O que vc acha ?

[14] Comentário enviado por scapinello em 15/03/2006 - 11:34h

Seu artigo é muito Bom, é mais uma referência, para os aficionados por aplicativos gráficos para o mundo open source. Espero que o QT e outras ferramentas se tornem mais pupulares. É o unico caminho que vejo para acabar com o império de Gates.
Mais uma vez parabéns pela contribuição

[15] Comentário enviado por taynealmeida em 19/04/2006 - 10:59h

muito legal o seu artigo, é simples e fácil de entender!
gostei muito!
se tiver mais artigos sobre o assunto gostaria de ficar sabendo.

[16] Comentário enviado por netShot em 07/07/2006 - 13:09h

excelente artigo .. em breve estarei migrando de delphi/windows pra c/c++/linux

[17] Comentário enviado por eng.paulinho em 26/07/2006 - 09:52h

Poutz cara era o que eu tava procurando a um tempo..... fiz o exemplo acima.... muito bom, valeu pela ajuda!

[18] Comentário enviado por removido em 01/08/2006 - 02:58h

Parabens...exelente artigo.

[19] Comentário enviado por thiago_mtr em 23/08/2006 - 20:45h

Muito bom artigo, muito bom para incentivar os usuários a usarem o QT e programação c/c++.

Parabéns.

Thiago Martins ^_^

[20] Comentário enviado por myninox em 19/07/2007 - 00:38h

deu só um problema quando eu executei o programa porque alguem sabe.
$ ./qtExample
QPixmap: Invalid pixmap parameters
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 18
Minor opcode: 0
Resource id: 0x0
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 12
Minor opcode: 0
Resource id: 0x0
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20
Minor opcode: 0
Resource id: 0x0
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 18
Minor opcode: 0
Resource id: 0x0
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 8
Minor opcode: 0
Resource id: 0x0



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts