Wieloplatformowość Qt

Wieloplatformowość Qt
mcoder
  • Rejestracja:około 12 lat
  • Ostatnio:około 5 lat
  • Postów:117
0

Dzień dobry,
Kolejne krótkie pytanie, czy jeżeli program używa tylko biblioteki Qt (QApplication, QSplashScreen, QTimer, QTcpSocket itd.) to bez zmian w kodzie skompiluję go na wszystkie systemy, które Qt obsługuje?


<sup>_</sup>
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 20 godzin
  • Lokalizacja:Szczecin
1

Tak powinno być, o ile przypadkiem jakichś api konkretnego systemu nie używasz. Ale jeśli tylko Qt, to nie powinno być problemów.


HO
Przyłączam się do wypowiedzi.
mcoder
  • Rejestracja:około 12 lat
  • Ostatnio:około 5 lat
  • Postów:117
0

Rozumiem, że np. pod Windowsem i Linuxem będzie inny zapis pliku na przykład (ścieżka inna). Dziękuję za odpowiedz.


<sup>_</sup>
kq
Oczywiście, ale korzystanie z zahardkodowanych pełnych ścieżek to z reguły zły pomysł. Tak samo, jeśli podzieliłeś swoją aplikację na kilka modułów to nie możesz w pliku .pro hardkodować ich rozszerzeń jako .so lub .dll
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:mniej niż minuta
2

W prostych programach wszystko działa na wszystkich wspieranych platformach. Od czasu do czasu trafia się jakaś niekompatybilność, ale w wielu wypadkach, wynika to z niestosowania się do "coding convention" dla qt (przykładowo, w Qt powinno używać się '"/" jako separatorów katalogów nawet na windows - qt automatycznie dokona konwersji - a jeśli się stosuje windowsowe '" to pojawią się problemy).
Trafiają się też rejony, których nie da się poratować (qt ma troszkę API, które jest dostępne tylko na jednej platformie), ale wtedy są triki by "rozwidlić" projekt w małym fragmencie.
Z innych niekompatybilności, które nie są tak uciążliwe, to nieco inny zostaw czcionek na każdej platformie, prze co aplikacja może zmienić troszkę wygląd.

Do tego jeszcze dochodzą niekompatybilności architektury procesorów (arm-x86). Przykładowo zapisywanie danych binarnych wymaga dodatkowej ostrożności, by dane te były przenośne między platformami. Chodzi tu: o format liczb zmiennoprzecinkowych, wielkość int-a (32/64 bit) oraz endianę. By rozwiązać ten problem Qt dostarcza QDataStream.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22
mcoder
  • Rejestracja:około 12 lat
  • Ostatnio:około 5 lat
  • Postów:117
0

A jak to jest z ikoną aplikacji i zasobami takimi jak np. obrazki? Nie wiedziałem jak to zrobić w Qt i użyłem skryptu zasobów .rc, ale wiadomo, że to tylko na Windows.


<sup>_</sup>
kq
Ikona to dość ciężka sprawa i prawdopodobnie będziesz musiał osobno dla każdego systemu się pomęczyć, natomiast wszystkie inne zasoby możesz bardzo wygodnie używać używając QResources, potem z QtDesignera możesz ich bezpośrednio używać (a pliki są dostępne w :/)
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:mniej niż minuta
0

Zasoby w qt nie są równoważne zasobom Windows, to jest własny standard Qt-ka, który działa na każdej wspieranej platformie.
Wszystkie pliki wypisane w pliku zasobów, zostaną przetworzone przez moc-a do strasznie wyglądającego pliku cpp (grafika jest prztwarzna na plik tekstowy zawierający opsi danych w postaci statycznych tabel), który jest automatycznie i po cichu dołączany do projektu, przez co staje się on częścią pliku implikacji/wtyczki/dl-ki. Taki pik potem otwierasz podając jego nazwę zaczynając od dwukropka.

Zaleta tego rozwiązania jest taka, że nie trzeba kombinować z katalogami, gdzie co ma się znaleźć (organizacja lokalizacji plików jest uzależnione od platformy, nawet poszczególne Linuxy potrafią się pod tym względem różnić). Wadą jest narzut na zużycie pamięci i ograniczania przy użyci części API (odtwarzanie dźwięków z zasobów jest utrudnione).

Osobiście nie lubię tego rozwiązania.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.