Voltei a mexer com Harbour e senti falta de um bom ambiente de desenvolvimento, motivo pelo qual me dediquei um pouco a entender como poderia integrar o Harbour, memso que usando o velho DBF, com uma interface de fato surpreendente.
Vou mostrar um pouco pra vocês como usar a IDE QT-Designer, de modo a desenhar formulários que podem ser chamados pelo seu programa.
Para iniciar primeiro deve-se é claro baixar a QT-Designer. Como estou no Linux, já fica disponível aqui para download e instalação no próprio sistema, mas quem estiver no Windows dá uma olhada no Google que deve achar fácil. Na verdade não testei no Windows, mas todo o kit da QT têm a promessa de ser multiplataforma, então muito provavelmente o procedimento é o mesmo.
Assumindo que esteja tudo em orderm, harbour compilado, contribs compilados etc e tal, podemos entrar na nossa IDE para desenhar uma telinha básica.
PARTE I - QT-DESIGNER
PASSO 1 - CRIANDO UM WIDGET
Ao entrar na QT-Designer essa tela será exibida. Caso não seja, basta ir em arquivo->novo e aparecerá. Nesta tela vamos apenas selecionar "Widget" e clicar em "Create", conforme a figura abaixo.

Veja abaixo a estrutura completa da IDE. Os recursos saltam aos olhos, tem tudo que qualquer das IDEs mais completas, mais famosas e mais caras tem.

PASSO 2 - ARRASTANDO ELEMENTOS
Na QT-Designer, os objetos devem ser arrastados para dentro do form, diferente de outras IDEs em que você clica no objeto e e depois clica no form. Então vamos criar um botão apenas o arrastando para o form. Veja a imagem:

PASSO 3 - ENVIANDO SINAIS A OBJETOS
Nesta etapa, vamos criar um pequeno evento através de sinais, apenas para demonstração. Para isso deve-se clicar no menu "Edit Signals", demonstrado na figura abaixo. Após selecionar este comando, clique no botão que criamos, que ficará selecionado e você poderá arrastar para onde ele vai enviar um sinal. Para simplificar, neste exemplo eu "liguei" o botão ao próprio formulário.
Neste momento surgirá uma caixa de diálogo onde os sinais e slots disponíveis de cada objeto aparacem para que você possa selecionar o que deseja fazer. Evidente que você pode criar sua própria funçao em Harbour e disparar no clique no botão, mas como este é um tuto básico, vamos nos ater a ver como funcinoa o lance dos sinais entre objetos do mesmo form.
Bom... neste exemplo eu selecionei que ao botão ser clicado, o formulário será maximizado. É muito simples, basta selecionar cada evento na coluna do respectivo objeto. Desde o começo do tutorial ainda não encostei no teclado para escrever uma letra.
Acompanhe:

PASSO 4 - TRABALHANDO COM LAYOUTS
Este sem dúvidas é o recurso mais poderoso desta desta IDE, em termos de desenho de telas. O gerenciamento de posicionamento de objetos é perfeito, as opções são inúmeras. Vou mostrar apenas algum detalhe.
Para que possamos trabalhar com um layout, precisamos colocar mais alguns objetos na tela. Eu coloquei um label e mais um botão.
Agora a parte que se segue é de extrema importância, pois é onde será realizado o agrupamento de objetos dentro do formulário.
Vamos começar agrupando os dois botões alinhados horizontamente. Para isso selecione os dois botões criados clicando com CTRL. e clique no ícone "Layout Horizontally", conforme a figurinha:

Após esta etapa você já poderá ver no Inspetor, os objetos agrupados através de um layout. Para finalizar vamos criar mais um grupo, mas desta vez um grupo geral que pega todo o form.
Para isso basta clicar em um espaço vazio do formulário e selecionar o comando "Lay Out in a grid", e em seguida, opcionalmnte em "Adjust Size".
Apenas um comentário. Esse layout geral como "Grid" é o que te dá a possibilidade de ter objetos auto-redimensionáveis, um dos recursos mais agradáveis de um programa desktop, que não precisa te proibir de redimensionar as janelas para não desalinhar tudo ou não ficar espaços em branco.
Veja como estamos:

PARA FINALIZAR SALVE O FORMULÁRIO. Eu chamei de teste-hbqt. A extensão padrão é *.ui. (foi a primeira vez que toquei no teclado)
PARTE II - CÓDIGO FONTE NO HARBOUR
Bom pessoal, aqui não vou explicar muito porque o código altamente legível e simples, de forma que qualquer clippeiro pode entender. Não há nada de outro mundo. De qualquer forma se alguém testar e tiver curiosidade ou dúvidas, pode postar aqui mesmo que eu na medida do possível eu vou tentando esclarecer. Sempre lembrando que eu também estou conhecendo a HBQT agora, embora a QT-Designer eu já conhecesse.
Aí vai o código. É só compilar e rodar:
Código: Selecionar todos
#include "hbqt.ch"
STATIC qApp
REQUEST HB_QT
INIT PROCEDURE Qt_Start()
qApp := QApplication():new()
RETURN
EXIT PROCEDURE Qt_End()
qApp:quit()
RETURN
PROCEDURE Main()
LOCAL oMinhaJanela, oLayout
oMinhaJanela := CarregaUI("teste-hbqt.ui")
IF ( oMinhaJanela == Nil )
MsgInfo( "Problema ao abrir form!!" )
QUIT
ENDIF
oMinhaJanela:show()
qApp:exec()
RETURN
FUNCTION CarregaUI( cArqUI )
LOCAL oDialogo, oUi, oArq
IF File( cArqUI )
oArq := QFile():new( cArqUI )
IF oArq:open( 1 )
oUi := QUiLoader():new()
oDialogo := QDialog():configure( oUi:load( oArq ) )
oArq:close()
ELSE
RETURN Nil
ENDIF
ELSE
RETURN Nil
ENDIF
RETURN oDialogo
STATIC FUNCTION MsgInfo( cMsg )
LOCAL oBox
oBox:= QMessageBox():new()
oBox:setInformativeText( cMsg )
oBox:setWindowTitle( "Informação!" )
oBox:exec()
oBox := NIL
HB_GCALL( .T.)
RETURN nil
PARTE III - CONCLUSÃO
É isso pessoal, na minha opinião não há nada no mundo xBase hoje que se compare a isso. Sem dúvidas é a melhor combinação entre Harbour, biblioteca gráfica e IDE.
Espero que seja de bom proveito para alguém, e aí vai o resultado final do programa, com a janela redimensinada para se ter uma idéia de como fica.
Abraços!!!




