Abra um novo projeto no QT e adicione dois push buttons, um pra abrir um site e outro pra abrir um programa específico. Aumente o tamanho dos botões e mude os names deles.
Adicione o slot clicked no botão de site e coloque esse código:
void MainWindow::on_btnSite_clicked() {
QString link = "https://www.google.com.br";
QDesktopServices::openUrl(QUrl(link)); // Inclua QDesktopServices e QUrl
}
PS: Ele abrirá o site no navegador padrão do sistema.
Adicione o slot clicked do segundo botão e coloque esse código:
void MainWindow::on_btnAdob_clicked() {
QString caminho = "file:///C:/Program Files/Adobe/Acrobat Reader DC/Reader/AcroRd32.exe";
QDesktopServices::openUrl(QUrl(caminho)); // Inclua QDesktopServices e QUrl
}
Podemos adicionar mais um botão para abrir outro programa, coloque o slot clicked com esse código:
void MainWindow::on_btnCalc_clicked() {
QString caminho = "file:///C:/Windows/System32/calc.exe";
QDesktopServices::openUrl(QUrl(caminho)); // Inclua QDesktopServices e QUrl
}
PS: Isso pode ser usado para qualquer tipo de arquivo. E não use as barras invertidas (\), mesmo se forem sequências de escape duplas. Mesmo em ambientes Windows, use a barra normal (/).
No Linux, caso isso não funcione, pode usar o QProcess (inclua esta biblioteca no mainwindow.h), dessa forma:
QProcess::execute("/usr/bin/gnome-calculator");
Para criar uma splash screen, coloque num projeto uma pasta com uma imagem. Vá em add new file, em QT e em QT Resource File, crie um nome e dentro dele, vá em add e add prefix o nome splash, e adicione o caminho da imagem.
Dessa vez, vamos no arquivo main.cpp (arquivo principal), dentro do método main, e modificaremos esse código assim:
QApplication a(argc, argv);
QSplashScreen *telaSplash = new QSplashScreen(); // Inclua QSplashScreen
telaSplash->setPixmap(QPixmap(":/splash/_imagens/arquivo.png")); // Path do arquivo de recursos, inclua QPixmap
telaSplash->show();
MainWindow w;
QTimer::singleShot(2000, telaSplash, SLOT(close())); // Inclua QTimer, parâmetro em milissegundos
QTimer::singleShot(2000, &w, SLOT(show())); // Coloca o endereço por não ter sido criado com ponteiro.
// w.show();
return a.exec();
Para rodar o programa fora do QT, escolha Release na hora de compilar, vai na pasta Release, onde estará o arquivo e pegue o caminho do programa e vá no shell do compilador correspondente e vá na mesma pasta, e digite windeployqt.exe .
(não esqueça do ponto), ele criará as bibliotecas necessárias para ele rodar, que deverão estar na mesma pasta do programa.
Caso deseje fazer manualmente, copie as dlls da pasta bin e os plugins da pasta plugin do compilador (no caso, o debug, em mingw, dentro da pasta Qt), e coloque na mesma pasta do executável. Para deletar as DLLs e plugins não úteis para o programa, na pasta dele, abra o programa e exclua esses arquivos, o que não for excluído é o que ele está usando. Faça o deploy dessa forma caso for projeto com banco de dados.
PS: Podemos adicionar a pasta do windeployqt no Path do Windows, colocando o caminho C:\Qt\6.2.2\mingw_64\bin
.
No Linux, adicione essas variáveis de ambiente em /etc/bash.bashrc:
QTDIR=/opt/Qt/6.2.2/gcc_64
QT_STYLE_OVERRIDE=adwaita
QT_QPA_PLATFORMTHEME=gnome
QT_QPA_PLATFORM=wayland
QT_DEBUG_PLUGINS=1
No projeto do programa, coloque no arquivo .pro referente, no final dele, essa linha:
unix: {
QMAKE_LFLAGS_RPATH=
QMAKE_LFLAGS += "-Wl,-rpath,\'\$$ORIGIN\'" -no-pie
}
PS: A flag "-no-pie" é pra compilar um executável ao invés de uma biblioteca compartilhada. Ela pode ser omitida.
Na pasta do projeto compilado, rode o comando chrpath -r \$ORIGIN NomeDoPrograma
(o comando chrpath modifica os locais onde o programa procurará as bibliotecas). Após isso rode esses comandos no terminal:
rm *.o
rm *.h
rm *.cpp
rm Makefile
sudo cp -r /opt/Qt/Tools/QtCreator/lib/Qt/lib/* "$PWD"
sudo cp -r /opt/Qt/Tools/QtCreator/lib/Qt/plugins/* "$PWD"
sudo cp -r /opt/Qt/6.2.2/gcc_64/lib/* "$PWD"
sudo cp -r /opt/Qt/6.2.2/gcc_64/plugins/* "$PWD"
sudo chown -R eu:eu *
cd platforms
chrpath -r \$ORIGIN/.. libqxcb.so
cd ..
O comando acima copiará todos os SO para o diretório do aplicativo, mas nem todos eles serão utilizados efetivamente, para colocar apenas os arquivos necessários, podemos usar esse script SH aqui para isso (Clique Aqui para Baixar), coloque ele no mesmo diretório do programa.
No Linux, podemos também usar o linuxdeployqt para isso, da mesma forma que o windeployqt.exe, baixamos ele daqui: https://github.com/probonopd/linuxdeployqt/releases
PS: Em quaisquer sistema, caso faça deploy de aplicativo com banco de dados, veja se a pasta "sqldrivers" está no diretório do aplicativo. Outras pastas com drivers podem ser necessárias também.
Primeiramente, vai nesse link e baixa o instalador pra plataforma especificada: https://download.qt.io/official_releases/qt-installer-framework/
Depois de instalar, coloque o path no seu sistema para a pasta (no caso do Windows é C:\Qt\QtIFW3.1.1\bin
)
PS: O instalador framework vem por padrão nas versões mais recentes do QT, procure ela dentro da pasta do qt em tool.
Vá na pasta examples, dentro da pasta do framework, e copie a pasta startmenu e edite o nome para instalador. Dentro dessa pasta, entre na pasta config e edite o arquivo config.xml de forma que essas linhas fiquem assim:
<Name>Nome do Instalador do Programa</Name>
<Version>1.0.0</Version>
<Title>Nome do Programa</Title>
<Publisher>Nome do Publicador</Publisher>
<StartMenuDir>Nome do Programa</StartMenuDir>
<TargetDir>@ApplicationsDirX86@/NomeDaPasta</TargetDir>
PS: O HomeDir é a pasta home do usuário, se quiser direcionar para a pasta Program Files, use as variáveis @ApplicationsDirX86@
para programas de 32 bits e @ApplicationsDirX64@
para programas de 64 bits.
Entre na pasta packages, org.qtproject.ifw.example (ou equivalente) e em data, exclua o que tiver dentro dele e coloque tudo que tiver na pasta do programa em QT já com o deploy realizado lá dentro.
Em meta, dentro da org.qtproject.ifw.example, abra o package.xml e edite ele assim:
<DisplayName>Nome do Programa</DisplayName>
<Description>Nome do Programa</Description>
<Version>1.0.0</Version>
Na mesma pasta, abra o installscript.qs, e altere o final dessa forma:
component.addOperation("CreateShortcut", "@TargetDir@/nomedoexecutavel.exe", "@StartMenuDir@/nomedoexecutavel.lnk",
PS: Para personalizar o ícone, coloque a pasta do ícone dentro do diretório data, onde estará o programa.
E no arquivo installscript.qs, altere a determinada linha assim:
iconPath=@TargetDir@/images/meuicone.ico
PS: Pode ser também o ícone do próprio programa (é até preferível):
iconPath=@TargetDir@/nomedoexecutavel.exe
Na pasta do instalador, temos o README, abra ele e copie esse comando:
binarycreator --offline-only -c config/config.xml -p packages installer
Vamos no menu do QT e abrir o console do mingw e ir até dentro da pasta do instalador e digite esse comando acima, com o nome do instalador, assim:
binarycreator --offline-only -c config/config.xml -p packages nomedoinstaladordoprograma
Daí é só esperar e pegar esse instalador pra instalar o programa.
Caso deseje desinstalar o programa, basta executar o maintenancetool.exe ou ir na lista de programas do Windows.
PS: Podemos adicionar a pasta do binarycreator no Path do Windows, colocando o caminho C:\Qt\Tools\QtInstallerFramework\4.3\bin\
.