TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Stanis Luksys »

Bom,

Terminei aqui uma classe pra manipular os objetos do formulário, usando somente a HBQT e acho que ficou melhor que as outras classes que achei nos exemplos e nas próprias libs. Diferente de todas que encontrei pronta, essa não carrega seus objetos do form.ui para criá-los dentro de uma nova janela através de um layout, essa minha classe de fato executa sua janela.

O nome dela é FormUI, e o arquivo é o TFormUI.prg:

Código: Selecionar todos

#include "hbclass.ch"
#include "hbqt.ch"

CLASS FormUI

   DATA oJanela
   DATA cArqUI
   DATA hObjetos  INIT hb_hash()
   
   METHOD new()
   METHOD destroy()
   METHOD carregaObjetos()
   METHOD evento()

ENDCLASS



METHOD FormUI:New( cArqUI )

   LOCAL oUi, oArq
   LOCAL lErro := .F.

   IF File( cArqUI )
      oArq := QFile():new( cArqUI )
      IF oArq:open( 1 )
	 oUi	     := QUiLoader():new()
	 ::oJanela   := QDialog():configure( oUi:load( oArq ) )
	 oArq:close()
      ELSE
	 lErro := .T.
      ENDIF
   ELSE
      lErro := .T.
   ENDIF

   IF ( lErro )
      RETURN NIL
   ENDIF
   
   ::carregaObjetos( cArqUI )

RETURN Self


METHOD FormUI:carregaObjetos( cArqUI )
   LOCAL cBuffer := memoread( cArqUI )
   LOCAL n, cClass, cWidget
   LOCAL bBlock, xElem, oObj, pPtr

   DO WHILE .t.
      IF ( n := at( "widget class=", cBuffer ) ) == 0
         EXIT
      ENDIF
      cBuffer := substr( cBuffer, n + 13 )
      n := at( "name=", cBuffer )
      cClass := alltrim( strtran( substr( cBuffer, 1, n-1 ), '"', "" ) )
      cBuffer := substr( cBuffer, n + 5 )
      n := at( ">", cBuffer )-1
      cWidget := alltrim( strtran( substr( cBuffer, 1, n-1 ), '"', "" ) )

      IF type( cClass + "()" ) == "UI"
 
	 pPtr := Qt_findChild( ::oJanela, cWidget )
	 bBlock := &("{|| " + cClass + "() }")
	 xElem := eval(bBlock)

	 IF hb_isObject( xElem )
	    xElem:pPtr := pPtr
	    oObj := xElem
	    ::hObjetos[cWidget] := oObj
	    __objAddData( self, cWidget )
	    ::&(cWidget) := oObj
	 ENDIF

      ENDIF

   ENDDO

RETURN NIL

METHOD FormUI:evento( cObj, nEvento, bBlock )
   IF hb_hHasKey( ::hObjetos, cObj )
      Qt_Connect_Signal( ::&(cObj), nEvento, bBlock )
   ENDIF
RETURN NIL


METHOD FormUI:Destroy()
   local i
   for i=1 to len(::hObjetos)
      __objDelData( self, hb_HKeyAt(::hObjetos,i) )
   next
RETURN NIL

Para usar no seu código, ficaria algo assim:

Código: Selecionar todos

PROCEDURE Main()
   LOCAL oFormUi

   oFormUi := formUI():New("form.ui")

   oFormUi:oJanela:show()
   oFormUi:oJanela:setWindowTitle("Título da Minha Janela")

   oFormUi:evento( "botao_1", "clicked()", {|| MinhaFuncao() } )
   qApp:exec()

   oFormUi:Destroy()   // IMPORTANTE !!!!!

RETURN NIL
Supondo que você tenha desenhado um objeto chamado "botao_1" no seu formulário, você o acessa, da seguinte forma:

Código: Selecionar todos

oFormUi:botao_1:  .... // aqui vai um metodo ou propriedade
IMPORTANTE: A janela carregada do arquivo *.ui para o objeto :FormUi() sempre deve ser referenciada como oJanela. Assim:

Código: Selecionar todos

oMeuForm := formUI():New("NomeDoArquivoUI.ui")
oMeuForm:oJanela    // esta é sua janela
Adicionalmente pode-se adicionar uma função Funcao ( através de codeblock) ao evento eEvento de um objeto oObjeto através da seguinte sintaxe:

Código: Selecionar todos

oMeuForm:evento( "oObjeto", "eEvento()", {|| Funcao() } )

Por enquanto, me parece ter suprido todas as minhas necessidades. O resto é com a hbqt mesmo.

Abraços
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Cezar
Usuário Nível 3
Usuário Nível 3
Mensagens: 189
Registrado em: 27 Mai 2006 14:03

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Cezar »

Ola,

QT_DESIGNER
LGPL
QT SDK FOR WINDOWS* ( 293MB )

Este é download que voces estão usando??

grato
v_cez@yahoo.com.br
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Toledo »

Cezar, eu estou usando a versão 4.6.0-rc1 com o MSVC:

http://get.qt.nokia.com/qt/source/qt-wi ... vs2008.exe

Veja outras versões em:

http://qt.nokia.com/downloads/downloads (depois clique em LGPL)

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
clrod
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 17 Nov 2009 13:42
Localização: São Paulo - SP

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por clrod »

Olá

Eu estou usando o mais sdk mais atual http://get.qt.nokia.com/qtsdk/qt-sdk-wi ... 010.04.exe

Eu estou querendo testar o RC do 4.7 http://get.qt.nokia.com/qtsdk/qt-sdk-wi ... 05-rc1.exe

T+
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Stanis Luksys »

Opa,

Pra mim vocês tão falando grego! rs

O que eu posso dizer é que olhando aqui no menu "About" da Qt-designer, diz que a versão da Qt é a 4.6.2. Provavelmente é estável, pois para ferramentas de desenvolvimento eu só o uso os repositórios estáveis. Já a Qt-Creator é a versão 1.3.1, escrita para Qt 4.6.1. Portanto existe uma pequena diferença entre as versões que o Creator e o Designer se baseiam. De qualquer forma eu compilei tudo usando a mesma, que foi a 4.6.2, e está tudo rodando direitinho.

Um tanto quanto confuso mas acho que deu pra entender. Agora esse lance de SDK e MSVC não entendi nada! O que é tudo isso?

Existe um detalhe importante, que quem deseja desenvolver para distribuir sem nenhum código fonte, tem que desembolsar uma graninha lá na vesrão comercial. Quanto será que custa?

Neste sentido a GPL é uma "furada", a LGPL nem tanto, mas se o cara te joga um processo, de acordo com uma interpretação do Juiz, é capaz de conseguir seus fontes, embora no Brasil as leis de informática ainda estejam engatinhando. Mas se prevenir é bom, já pensou um cliente seu ganhando seu código na justiça? rs

Quem desenvolve profissionalmente mesmo, é sempre bom pedir pra um advogado dar uma revisada nessas licenças (embora seja até simples de entender), pois eu sei que tem uma delas que é extremamente restritiva, só não me lembro qual. Aliás me parece que é esta mesma que eles usam, pois olha o que está escrito sobre a licença comercial: "Use, modify and redistribute Qt with no obligation to share your source code "...

Abraços!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Toledo »

Stanis Luksys escreveu:Agora esse lance de SDK e MSVC não entendi nada!
SDK é um Kit que algumas empresas fornecem para que os programadores possam desenvolver seus programas com maior facilidade, como é o caso do QT da Nokia. SDK vem da sigla "Software Development Kit".

Agora MSVC é a sigla de "Microsoft Visual C++", que é o compilador que estou usando com o QT.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
clrod
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 17 Nov 2009 13:42
Localização: São Paulo - SP

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por clrod »

Olá

O Toledo pega o framework pré-compilado para usar com o MSVC, disponível na página de downloads da Qt. Eu prefiro o SDK completo que vem com o Qt Cretaor e outras ferramentas além do framework.

Eu uso a sempre versão mais estável. O primeiro link que passei acima é o mais completo, atual e estável que você pode pegar. O segundo link é a próxima versão, consequentemente ainda não totalmente estável, um pouco porque já é release candidate. Só deve ser usada para testes de quem está curioso se haverá compatibilidade da nova Qt com a HBQt sem modificações.

T+
Cezar
Usuário Nível 3
Usuário Nível 3
Mensagens: 189
Registrado em: 27 Mai 2006 14:03

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Cezar »

Boa tarde Toledo,

Baixei e instalei o qt-win-opensource-4.6.0-rc1-vs2008.

Pelo que entendi, o QT gera os formularios, botoes, caixa de entrada de dados, etc.., no Harbour eu escreveria os procedimentos dos botoes, dos dados, etc..

Duas dúvidas:
Hoje eu uso o Bcc55, se eu quizer usar MSVC, preciso:
1. Recompilar o Harbour para MSVC?
2. Posso usar MSVC express sem problemas?

Grato
v_cez@yahoo.com.br
clrod
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 17 Nov 2009 13:42
Localização: São Paulo - SP

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por clrod »

Olá

1. Sim
2. Sim

T+
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Stanis Luksys »

Olá,

Valeu pelas explicações!
Cezar escreveu:Pelo que entendi, o QT gera os formularios, botoes, caixa de entrada de dados, etc.., no Harbour eu escreveria os procedimentos dos botoes, dos dados, etc..
Sim, mas nada impede de que você faça tudo manualmente utilizando as classes e funções padrões da biblioteca hbqt, o que de certa forma seria mais "seguro", visto que não há nada realmente estável (por estável, digo oficialmente) implementado para que se possa usar os formulários *.UI gerados pela Qt-Designer. Caso queira fazer isso, recomendo esta classe que eu fiz e postei acima, a qual já até fiz alguns poucos ajustes, e serve com uma ponte entre sua app e o formulário propriamente.

Lembrando também que conforme já abordado aqui, se utilizar este método de desenhar pela qt-designer, terá de enviar os arquivos *.ui para o cliente, mas já estou estudando uma forma de adicioná-los num arquivo de recursos, como um RC ou até uma DLL por exemplo, podendo então chamar por esta classe (que pretendo aprimorar), o que seria bem mais discreto e profissional.

Embora uns anos atrás eu mesmo tenha feito um programinha que convertia os forms da IDE do Roberto Lopes em prg (tópico), e o pessoal aqui até usou, não acho que converter o form.ui em fonte .prg seja uma solução muito boa, pois o XML é universal, e este tipo de programa conversor tende a ter bugs (trabalhar com strings é chato pra caramba). Aliás, aquele programinha que eu fiz, também acho que não foi uma boa saída. Este é um conceito que é preciso se acostumar, tela é uma coisa, processo é outra. Até no PHP a gente separa o que é Layout do que é Código mesmo, e olha que é confuso, porque lá sim tem que misturar e não tem saída.

Abraços!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Stanis Luksys »

Opa,


Quem quiser dar uma conferida, postei o mesmo tutorial em forma de vídeo no youtube, já utilizandoa a minha classe. Com pouquíssimas linha de código, o vídeo demonstra a agilidade no desenvolvimento e a intergração que a Qt oferece com o SO.



Abraços!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Stanis Luksys »

Pois é,

Eu estive afastado do Harbour um tempo e até ouvi falar da hbQt, xGTK e outras opções que me pareciam um tanto quanto obscuras. O material é escasso, e os exemplos padrões são fracos.

O que me chamou atenção quando voltei com o harbour, foi que a MiniGUI não tinha nada para Linux após 4 anos de eu ter testado um primeiro exemplo. A HwGUI é uma excelente biblioteca também, mas ainda me faltava um desenhador de telas bom de verdade. Sabe, eu vou ser sincero com você: eu passei da fase de querer fazer tudo na mão pra dizer pra mim mesmo que eu sou o cara. O negócio pra mim é uma ferramenta que faça o máximo possível no meu lugar, mas sem geração de código automático. Me refiro ao desenho de telas apenas.

Enfim, fui testando as opções acima citadas, e eu já tinha feito meus programinhas de teste usando a Qt Creator (no padrão dela que é C++). Sabe como é, no meu menu "Iniciar" tem umas trocentas linguagens e IDEs de tudo quanto é tipo (no Linux se intala por padrão ao escolher uma distribuição voltada ao desenvolvimento), e eu gosto muito de brincar de programar, então pelo menos um "helllo world" com cada uma delas eu já fiz... rs

Aí um belo dia, depois dessa minha "volta" ao xHarbour, eu pensei... Será que esta hbqt pode mesmo fazer a mesma coisa que a Qt Creator, ou pelo menos interagir com os forms UI? Isso seria um sonho, pra quem teve como última experiência a HMG-IDE e outras tentativas neste sentido.

Então, passei a ler os códigos da hbqt, os exemplos etc e para minha surpresa achei o bendito formulário *.ui na pasta da hbide. Fiquei louco com isso e passei a noite toda tentando achar uma forma de aprimorar o acesso aos *ui, que estava confuso demais, e usando outras libs para um objetivo simples.

Quando finalmente consegui desenhar uma tela na Qt Designer e chamar pelo Harbour com duas linhas de código fiquei tão entusiasmado que eu precisava dividir isso com o pessoal, mesmo que todo mundo já conhecesse... rs

Tudo isso me impressiona pelo seguinte: no Windows você compra em qualquer barraquinha um CD com Delphi ou Visual C++ e chove IDEs e ambientes de desenvolvimento para tudo que é linguagem. No Linux o buraco é mais embaixo quando se trata de programação visual, e podendo unir isso a minha linguagem mais adorada, foi a realização de um sonho.

Agora é isso, eu programo aqui no meu Linuxizinho aplicativos bonitos, com recursos visuais bons, e o cara pode rodar eles no Windows da mesma forma.

Se ficar muito pesado e não der pra usar, como você mencionou, aí paciência, não usa. Existem outros softwares disponíveis pra este mercado de Windows 9x, geralmente aqueles que foram desenvolvidos nessa época. Aqui no meu PC tem rodado sempre abaixo de 1% de CPU, bem tranquilamente com relação a memória também. A conferir...

Para mim hoje é o contrário do que para muita gente, funcionando no Linux é o que importa, se funcionar no Windows também, melhor ainda! Apesar dos fomosos somente 3 ou 5% de mercado para o Linux, isso equivale e milhões de pessoas, e proporcionalmente, existem muito menos programas para cada tarefa. Vender um aplicativo que só funciona em Linux não é tão difícil quanto parece, e a concorrência é mínima. Para Windows ta ficando difícil, as grandes estão dominando, e os pequenos vemdem a 10 reais com código fonte no Mercado Livre.

Agora se o sujeito não tem dinheiro pra ter um PC que aguenta pelo menos o Windows XP (de 2001!!), melhor seria ter ecnomizado 400~500 reais de Windows e ter comprado um processador melhor ou uma plaquinha de vídeo, que no Linux ia ficar bom ao mesmo custo. E se nem a MS que é bilionária da suporte aos Windows 9x não sou quem vou dar.

Eu sei que me torno chato quando acabo falando mal do Windows, igual crente que tenta te converter (desculpe se alguém é evangélico) e ainda vou perder este costume, desculpe. Mas pra o mim o Windows morreu quando quiseram matar os aplicativos for DOS e qualquer outra iniciativa de rodar programas em modo console, e ele é meu primeiro SO, assim como o Clipper é minha primeira Linguagem. Nunca fale mal do DOS ou do Clipper para mim. Eu adoro modo texto, passo 50% do meu tempo no console de comandos, e no Windows isso dexou de evoluir desde o Windows 95.

Abraços!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por fladimir »

Obrigado pela postagem Stanis e demais colegas este tópico foi muito bom pra mim e com ceteza pra outros...

Espero após análises e testes poder colaborar com demais colegas...

Sds..
:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
binho_fasa
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 06 Jul 2004 12:53
Localização: Brazil
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por binho_fasa »

O uso da QT + Harbour é muito interessante. Parabéns pela iniciativa em compartilhar o seu conhecimento. Eu fiquei impressionado com as possibilidades e a facilidade de uso.
Como ficaria o uso de um Browse, já que nós do Clipper/(x)Harbour usamos muito este recurso.

[]´s
Fabio Souza
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: TUTORIAL: Harbour com QT-Designer. Uma combinação perfeita!

Mensagem por Stanis Luksys »

Opa,

Aí neste caso você precisaria do QTableView, ou até de forma mais simples usando o QTableWidget, que se você desenhar pelo Qt-Designer e der o nome de minhaTable, usando a classe acima, ficaria mais ou menos assim para adicionar itens:

Código: Selecionar todos

oNovoItem := QTableWidgetItem():New()
oNovoItem:setText( "texto" )
// oNovoItem:set......() configurar outras propriedades de oNovoItem
oFrmUI:minhatable:setItem( linha, coluna, oNovoItem )
É mais ou menos por aí...

Abraços!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder