Manual

do

Maker

.

com

Distribuir programa em Qt para Windows

Distribuir programa em Qt para Windows

Pela primeira vez, fiz um programa em Qt usando Windows. Já mostrei como criar um instalador para seu programa em Qt no LInux, até citei alguns modos de criar instalador no Windows, mas sem detalhes.

Não quero revelar detalhes ainda, mas fiz o programa para a comunidade maker. Será gratuito e para um propósito interessante, que vai ajudar bastante em uma tarefa específica, relacionada ao microcontrolador, seja Arduino, ESP, PIC, RPi Pico etc. Acompanhem, teremos vídeo em breve.

Ferramenta de deploy para Windows

O Qt traz uma ferramenta de automação de deploy, chamado windeployqt. O procedimento está descrito na documentação oficial do Qt, só é meio chato de seguir o estilo de leitura, em minha opinião.

Primeiro passo: Localize o batch qtenv2.bat

Pois é, teremos que usar terminal. Mas nada traumatizante. A execução desse batch é necessária para instalações que usam o QT Installer. Normalmente, ficará em C:\Qt..., onde, ... deve ser algum lugar como:

qtenv2_bat.jpg

Na documentação aponta diretamente para bin após QTDIR. Na imagem acima, executei o bash dentro do PowerShell porque não estou acostumado com os comandos do Windows. O bash não está instalado por padrão no Windows e para tê-lo, é necessário configurar o WSL. Não é necessário fazer mais esse setup, apenas localize o arquivo da forma que lhe for conveniente.

O programa windeployqt.exe também estará nesse diretório. Ao executar o batch qtenv2.bat, o caminho será adicionado ao path do sistema, de modo que quando executarmos o programa no diretório da nossa aplicação, o Windows saberá a partir de onde chamar o windeployqt e qualquer dependência relacionada. Após ter localizado o batch, saí do bash para poder executá-lo no terminal do Windows. Pode ser o shell padrão (aquele emulador de DOS que abrimos executando cmd) ou o PowerShell:

qtenv2_bat-1.jpg

Segundo passo: Entre no diretório da sua aplicação

Agora que temos o caminho do windeployqt configurado no sistema, podemos entrar no diretório de nossa aplicação para executá-lo.

O windeployqt supre as dependências do executável. Vale citar que esse procedimento é necessário para programas que usam bibliotecas compartilhadas. A outra opção é gerar um binário estático - isto é, que não depende de nenhum recurso externo, pois inclui em si todos os recursos para sua execução. Obviamente isso tem um preço; o programa será maior e se você fizer vários programas estáticos, todos eles terão em si recursos que poderiam ser compartilhados entre eles, através das bibliotecas instaladas no sistema.

Se seu programa usa QML, o programa deve ser executado com o parâmetro --qmldir, de modo que ele usará o qmlimportscanner para procurar pelas relações QML do seu programa. O programa que fiz dessa vez não usa QML.

O comando pode ser executado de qualquer lugar do terminal agora, bastando especificar o caminho da aplicação:

windeployqt caminho_do_seu_binario.exe

No caso, aqui ficou assim, no início das mensagens de saída de execução:

windeployqt_started.jpg

Agora podemos criar o instalador, pois já garantimos que todas as dependências foram supridas.

Terceiro passo: Criar o instalador com InnoSetup

O instalador pode ser feito de forma semelhante ao desse artigo. De fato, fazer como descrito nesse artigo é um pouco mais trabalhoso, mas é a forma nativa do Qt. Porém, se tratando de Windows, podemos utilizar o famigerado InnoSetup. Link para o instalador.

O InnoSetup tem suporte a encriptação, sugerido durante a instalação do programa. Porém, em alguns países não é permitido sua utilização. Particularmente, não vejo razão para encriptar um programa que será distribuído gratuitamente e optei por não instalar o recurso.

A instalação é no estilo tradicional do Windows: "Next, Next... Finish". Ao final, podemos já abrir o InnoSetup, chamado diretamente pelo instalador.

Se ainda não tem experiência com essa ferramenta (eu não tenho), então use o Wizard, que o guiará durante o processo. A tela do Wizard é essa:

innoSetup-wizard.jpg

Nessa janela devemos configurar coisas óbvias, não tem o que explicar. Já na janela seguinte, especificamos o caminho de destino da instalação, que por padrão é o Program Files. Nessa mesma janela devemos especificar também o nome do diretório para a aplicação. Mantive com o mesmo nome da aplicação.

Clicando em Next, temos a janela para especificar a origem, que no caso é o diretório da nossa aplicação. Nessa janela podemos também definir se o usuário pode (ou não) executar o programa ao fim da instalação:

innoSetup-src_folder.jpg

A próxima janela importante é a Compiler Settings. Nela, especificamos apenas o nome de saída do instalador e, opcionalmente, um ícone e senha para o instalador:

compiler_settings-innoSetup.jpg

Após concluir (deixando o resto das janelas como padrão), será gerador um script de definições do InnoSetup, que será usado para gerar o instalador. Mas ao final ele já pergunta se desejamos executar o script de compilação. Confirme.

execute-installer-innosetup.jpg

Ao confirmar, ele perguntará se deseja salvar o script de compilação. É bom para quando formos liberar novas versões do programa, bastando editar os "defines" desse script. Para familiarizá-lo, eis a janela de compilação:

compiled-innoSetup.jpg

Ao finalizar, vá atéo menu Build e clique em Open Output Folder. Agora é só distribuir!

Adicionalmente, preciso dizer que algumas "caneladas" serão inevitáveis, principalmente na parte de seleção de arquivos e diretórios relacionados ao projeto. Nada que não se resolva observando mensagens de erro na execução da aplicação. Mas como isso não acontece com toda a aplicação, não vale a pena gerar um caso de exemplo.

No próximo artigo devo apresentar o programa em Qt, que está em teste localmente. Assim que for testado por outro maker (ainda estou selecionando), disponibilizo o vídeo e o link para download. Claro, o Qt é multiplataforma e compilarei o mesmo programa para Linux.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.