Qt 5.7 z wymaganą zgodnością ze standardem C++11

Qt 5.7 z wymaganą zgodnością ze standardem C++11

    przez -
    7 1179
    Qt - nowe logo
    Digia ogłosiła wydanie Qt 5.7, zestawu przenośnych bibliotek i narzędzi programistycznych dedykowanych językowi C++. Ich podstawowym składnikiem są klasy służące do budowy graficznego interfejsu programów komputerowych, a także narzędzia do tworzenia programów konsolowych i serwerów. Zmieniono licencjonowanie po raz kolejny. Usunięto licencję LGPLv2.1, a całego Qt będzie dostępne na LGPLv3, dla praktycznie wszystkich frameworków i bibliotek, a także GPLv3 dla narzędzi, jak np. Qt Creator. Uwolniono także kolejne zamknięte dodatki na licencji GPLv3.

    Zmiana licencji pozwoliła na ujednolicenie Qt for Application Development, oferowane w wersjach Open Source i Commercial. Poczynając od Qt 5.7 oba pakiety posiadają dokładnie taką samą zawartość. Oto moduły, które pojawiły się w wersji Open Source:

    • Qt Charts (GPLv3)
    • Qt Data Visualization (GPLv3)
    • Qt Virtual Keyboard (GPLv3)
    • Qt Purchasing (LGPLv3)
    • Qt Quick 2D renderer (GPLv3)

    Jedynym wyjątkiem jest Qt Quick Compiler, który wymaga pewnych zmian w kodzie, aby mógł być obecny w wolnej edycji.

    Od tej wersji wprowadzono obowiązek kompatybilności kodu ze standardem C++11. Chodzi tutaj o wymuszenie wykorzystania takich funkcji, jak constexpr, decltype, pętle zakresowe itp. Kompilator automatycznie sprawdza, czy wszystko jest w porządku. Zmiana ta pozwoli na dodawanie nowych funkcji oraz odświeżenie sporej liczby funkcji w samym Qt.

    Dodano moduł Qt 3D oraz obsługę Qt Quick Controls 2.

    Dodano sporo nowych funkcji w modułach: Qt Core, Qt Gui, Qt QML and Quick, Qt WebEngine, Qt NFC. Qt for Device Creation otrzymał sporo aktualizacji. Qt Creator 4.0 jest dostarczany razem z Qt 5.7. Dodano sporo nowych testowych technologii.

    • „Od tej wersji wprowadzono obowiązek kompatybilności kodu ze standardem C++11.”
      To zdanie nie ma sensu, każdy kod napisany przed 2011r., nie, całe Qt było od pierwszych linii zgodnie z C++11, ponieważ każda wersja C++ jest kompatybilna wstecz. Mowa tutaj o wymuszeniu wykorzystania ficzerów C++11 jak decltype, pętle zakresowe itp., co rzeczywiście znacznie upraszcza kod. Prosty przykład, zamiast:

      for(int i = 0; i < wektor.size(); i++) { wektor[i].doYourWork(); }
      Dostajemy to:
      for(auto & el : wektor) { el.doYourWork(); }

      • Ollbi

        Dziękujemy za sugestię. Poprawiliśmy troszkę akapit.

      • Dlatego lubię ten portal, w miarę często poprawiacie potknięcia. ;)

      • Może jeszcze inaczej – samo Qt teraz wykorzystuje pełną funkcjonalność C++11, więc wymaga kompilatora obsługującego C++11 i wymusza co najmniej C++11 w kodzie użytkownika – bo nagłówki Qt include’owane do kodu użytkownika korzystają z C++11.

      • Nom, ale to już raczej kosmetyczne różnice i w końcu wychodzi na „używają C++11”. Nie żeby to był standard sprzed 5 lat wspierany wszędzie od dawna, ciekawe dlaczego tyle z tym czekali. :

      • Ollbi

        Może mieli prośby od większych komercyjnych klientów, aby nie robić od razu takiej zmiany :-) I dlatego w Qt 5.6 (http://osworld.pl/qt-5-6-ze-wsparciem-dla-windows-10/) dali wybór oraz LTS, a Qt 5.7 już wprowadziło tą zmianę na stałe.

      • Racja, w korporacjach nawet dodanie do kompilacji przełącznika -std=c++11 sporo kosztuje. ;) Bo zmian w kodzie akurat nie trzeba by wprowadzać żadnych.