Bardzo popularnym, często powielanym błędem podczas deploymentu na Windowsa jest czekanie na błędy i wrzucanie bibliotek „na pałę” do folderu z binarką aplikacji, jest to pracochłonne, i działa tylko w niektórych przypadkach:
Trochę lepszym sposobem jest używanie dependency walker który, skanuje plik exe w poszukiwaniu zależności, i wyświetla brakujące biblioteki.
Zacznę od aplikacji
nieużywających komponentów Qt Quick
, do tego celu użyjemy narzędzia
windeployqt
, znajduje się ono w katalogu Qt, podkatalogu wersji, podkatalogu
mingw
, i wreszcie w folderze
bin
w moim przypadku jest to
C:/Qt/5.9/mingw53_32/bin
.
Najczęściej popełnianym błędem, który i ja popełniłem jest użycie złej wersji narzędzia
windeployqt
, dlatego wcześniej warto się upewnić jakiej wersji Qt użyliśmy do budowy aplikacji.
Teraz czas uruchomić
cmd
i wywołać
windeployqt
wraz z odpowiednimi argumentami, w przypadku prostej aplikacji będzie to
Narzędzie automatycznie wykryje potrzebne biblioteki, znajdzie je i dorzuci do katalogu z naszym plikiem exe.
W przypadku aplikacji Qt Quick, należy dodatkowo załączyć adres projektu, wynika to z tego, że aplikacja wymaga dynamicznie zaczepionych plików qml od komponentów które zostały użyte, w tym celu używamy windeployqt zgodnie ze składnią:
Tu warto wspomnieć, że częstym
błędem
jest mylenie folderu projektu, z folderem
qml
który znajduje się obok folderu
bin
.
Przykładowe użycie:
Po więcej argumentów w razie potrzeby należy wywołać:
Polecam też zajrzeć na http://doc.qt.io/qt-5/windows-deployment.html .
]]>
Dobra, jak się za to zabrać? Zróbmy niebieski ekran, w tym celu do
ApplicationWindow
podpinamy właściwość, jaką jest kolor i ustawiamy na „blue”, teraz trzeba zrobić, aby nasza aplikacja nie wyglądała jak aplikacja, w tym celu dodajemy właściwość
flags
i wartość
Qt.FramelessWindowHint
, kod powinien wyglądać tak:
Teraz wypadałoby zmusić aplikację, aby była na pełnym ekranie. Jest parę sposobów, moim zdaniem najprościej będzie zaimportować moduł od okien
import QtQuick.Window 2.0
, następnie ustalić
width
okna na
Screen.width
i analogicznie
height
.
Teraz potrzebny nam jakiś tekst, w tym celu do
ApplicationWindow
„podłączamy” komponent Text, ustalamy kolor, wielkość, font i inne ficzery.
Całość powinna wyglądać tak:
Nasz program właściwie jest już gotowy, można jeszcze dostosować font, wielkość itp. Co do tzw. deploymentu , czyli doprowadzania aplikacji do stanu, w którym można ją uruchomić na innym komputerze – opiszę ten proces w kolejnym poradniku, jest to głębszy temat.
]]>Qt – zestaw przenośnych bibliotek i narzędzi programistycznych dedykowanych dla języków C++ , QML i Java . Ich podstawowym składnikiem są klasy służące do budowy graficznego interfejsu programów komputerowych , począwszy od wersji 4.0 Qt zawiera też narzędzia do tworzenia programów konsolowych i serwerów. – Wikipedia
Może zacznę od motywacji, pisząc w C++ największym problemem jest multipletowość, niby jest, ale w praktyce trzeba się natrudzić żeby przepisać średnio zaawansowaną aplikacje z np. windowsa na linuksa, z pomocą przychodzi Qt, gdzie mamy gotową obsługę sieci, baz danych, zapytań, obsługi wielu wątków, obsługę jsona, xmla i wielu innych bardzo przydatnych pierdół. Przekonany?
Ale halo? Qt jest płatne , na co ty mnie naciągasz? Owszem, przy próbie pobrania na pierwszy rzut widać tylko możliwość kupienia/subskrypcji na zasadach trial, ale niżej jest opcja pobrania wersji otwartej, Community która prawie się nie różni od wersji płatnej.
Jeżeli znasz już podstawy C++ to super, jeżeli nie to odsyłam do książek lub Zelenta, ale i bez tego na start sobie poradzisz, no dobra, chcesz stworzyć projekt, ale tyle opcji do wybrania, co wybrać? I tu pojawia się kolejny problem z jakim początkujący walczą.
Najprostszym rozwiązaniem wydaje się Qt Widgets, ale czy aby na pewno? W Qt Widgets wszystko piszemy C++, ktoś może pomyśleć że super, znam C++ będzie łatwo, projektowanie interfejsu aplikacji używając samego C++ to jakieś nieporozumienie, cytując klasyka, co prawda jest opcja tworzenia interfejsu używając Designera, czyli specjalnego narzędzia dołączonego do Qt Creatora, jednak przy średnio zaawansowanych projektach designer często się crashuje i są duże problemy, lepiej się od niego nie uzależniać.
Co więc wybrać na początek?
Zdecydowanie polecam stworzenie projektu używając Qt Quick Controls, obecna najnowsza wersja to Qt Quick Controls 2, interfejs można malować używając banalnego języka frontendowego
QML
który składnią bardzo przypomina CSS.
Ujrzymy chaos, nasz projekt składa się z:
Zróbmy czerwony kwadrat na środku ekranu a w nim napis
Witam
.
W tym celu skracamy nasz kod do:
visible
– proporcja która definiuje to czy dany komponent jest widoczny
width
/
height
– szerokość / wysokość komponentu
title
– tytuł
Teraz dodajmy prostokąt, jak nazywa się prostokąt po angielsku? –
rectangle
,
nazwy komponentów zawsze piszemy z dużej litery, a zmiennych z małej.
Więc zróbmy prostokąt
Dobra, właściwości
width
i
height
chyba nie muszę ponownie tłumaczyć. color, definiuje kolor, można go zapisać na wiele sposobów,
czytaj więcej
.
Pojawiła się nowa zmienna –
anchors.centerIn
, zmienna ta definiuje to, że obiekt ma być w środku jakiegoś innego obiektu,
parent
to id obiektu na którego środku ma się znajdować nasz prostokąt, parent oznacza obiekt nadrzędny, ten który w hierarchii jest wyżej, warto zapamiętać. Równie dobrze w tym miejscu można wpisać jakieś id, każdy komponent może przyjmować wartość id, zaprezentuje to w kolejnym przykładzie niżej.
No okej, mamy okno, mamy jakiś brzydki, czerwony prostokąt, czas na tekst, jak to zrobić?
Analogicznie, do komponentu
Rectangle
należy „podczepić” komponent
Text
, robimy to w taki sam sposób jak
Rectangle
do
ApplicationWindow’a
, wypadałoby go wycentrować, użyj do tego
anchors.centerIn
, tekst ustalamy zmienna text, przykład
text: Witam
To twoje zadanie domowe
Możesz też poeksperymentować i zamiast tekstu dać
Button
, w tym celu zajrzyj do dokumentacji Qt Quick.