Qt 5.12 LTS リリース

Qt 5.12.0 がリリースされています。Qt 5.12 は 3 年間のサポート期間を持つ、5.6、5.9 に続く新しい Long Term Supported(LTS) バージョンとなります。Qt 5.12.0 は 5.9.7 からは 2000 以上、5.6.3 からは 5000 以上のバグが修正されています。

新しいプラットフォーム

Qt 5.12 から Python に正式に対応します。厳密には Qt for Python は別のリリースとなるため、Qt 5.12.0 リリース後に Qt for Python を別途リリースする形となります。

また、Qt for WebAssembly が2度目のテクニカルプレビューとなっています。Qt for WebAssembly を使うと最近の Web ブラウザ上で Qt アプリケーションを動かすことができるようになります。詳しくは「Qt for WebAssembly」を参照してください

新しいモジュール

Qt Remote Objects が正式にリリースされました。Qt Reote Objects はプロセス間通信(IPC)を行うためのモジュールです。別プロセスの QObject のプロパティやシグナル・スロットをこのモジュールを通じてアクセスできるようになります。

Qt WebGL Streaming Plugin を使うと Qt アプリケーションの画面を WebGL 経由でWeb ブラウザで表示させることができるようになります。

Qt QML & Qt Quick

QMLのJavaScriptエンジンが ECMAScript 5 から ECMAScript 7 対応へとアップグレードされました。また、ECMAScript モジュールへの対応も追加されています。

Qt Quick では TableView タイプの追加、新しい入力系対応タイプである Input Handler、Qt Quick Controls 2 への新機能の追加などが行われました。また、フォントのグリフのキャッシュ(pre-generating distance field textures)機能も追加されました。

Qt Core & Qt Network

Qt Core では CBOR(Concise Binary Object Representation)がサポートされました。また、 QRegularExpression クラスでワイルドカードがサポートされ、それにともない QRegExp クラスが非推奨(deprecate)となりました。

Qt Network では DTLS over UDP のサポートや、macOS, iOS で TransportSecurity バックエンド経由の ALPN や HTTP/2 のサポートが追加されました。

この他にも多数の変更が行われています。

Qt 5.11.3 リリース

Qt 5.11.3 がリリースされています。5.11系の最終リリースとなります。セキュリティ更新を含む重要なリリースのため、Qt 5.11以前を使用している人は注意してください。

この更新には以下のセキュリティ修正が含まれます。

Qt 5.9.7 には Qt Virtual Keyboard 以外のすべての修正が含まれています。Qt Virtual Keyboard は以下の変更を適用してください。

Qt 5.6.3 には以下の変更を適用してください。

Qt 5.9.7 リリース

Qt 5.9.7 LTS がリリースされました。

LTS(Long Term Support)が Strict フェーズに入ったこともあって、修正がメインです。大きな変更としては macOS 10.14 や Xcode 10 対応が入ったことでしょうか。ただし、ダークモードなどへの対応は行われていないので注意してください。

既知の問題をみるとクラッシュ系の問題などもいくつかありますので、こちらも注意が必要です。

QtQuick.TableView

Qt 5.12 で QtQuick モジュールに TableView タイプが追加されます。

これまでにも Qt Quick Controls モジュールには TableView タイプが存在していました。しかし、パフォーマンス改善などを行った Qt Quick Controls 2 モジュールには TableView 相当の QML タイプがなく、Qt 5.11 で Qt Quick Controls モジュールが非推奨になったにもかかわらず代替機能が無い状態でした。

Qt 5.12 に追加される TableView は QML で書かれていた Qt Quick Controls の TableView とは異なり、全面的に C++ で作成されています。これまでの ListView でのフィードバックも反映されているようで、色々とパフォーマンスなどに注意して作成されているようです。その代わり機能的にはまずは最小限での実装となりそうです。

ListView / ListModel で無理矢理テーブル表示を行っていた Qt Quick Controls 版に比較すると、QtQuick 版は以下の様な特徴を持ちます。

  • C++で作られており高速である
  • QAbstractItemModel で作成されたテーブルモデルが利用可能
  • デリゲートの再利用機能

特に特徴的なのがデリゲートの再利用機能でしょう。ListView ではデリゲートが生成したアイテムが画面外に移動した際に、画面外に出たデリゲートの生成したアイテムを破棄して、新しく画面に入ってきたアイテムを生成します。これ自体は特に問題の無い挙動なのですが、パフォーマンス悪化の原因となったり、メモリの確保や解放のタイミングとの兼ね合いでメモリのフラグメンテーションに繋がり、使用メモリ量の増大を引き起こします。

新しい TableView では画面外に出たアイテムを開放するのではなく、再利用することでメモリの確保・解放の回数を減らしています。しかし、再利用機能を使用するにはデリゲート側で再利用に対応したコードが必要となります。モデルのデータをバインディングして利用している場所は問題ありませんが、Component.onCompleted を使用していたり、プロパティの値を書き換えていたりした場合、以前の値が残るために再利用のタイミングで初期化が必要となります。そのために TableView.onPooled や TableView.onReused が用意されています。

このため、再利用機能の ListView への取り込みは現状では予定されていないようです。取り込まれるとしても TableView とは異なり、デフォルトでは無効にされると思われます。ListView でのパフォーマンス・メモリトラブルは少なくないので、是非取り込んで欲しい機能の一つです。

モデルに関しては現状では C++ で QAbstractItemModel 系のクラスを使用する必要がありますが、TableModel タイプが後日導入されるそうです。

機能的には現状は色々と足りていない状態で以下の機能がそれぞれ未実装となっています。

  • ヘッダー
  • セレクション系
  • span系

まだ詳細は不明ですが、モデルのロールでデリゲートを選択するための DelegateChooser も開発中のようです。このような機能もこれまでの Qt Quick ではパフォーマンスの確保が難しかったため、ListView へ適用出来るかなどが気になるところです。

ListView、TableView とくると残りは TreeView ですが、こちらは TableView が一段落がついた後になりそうで、まだまだ時間がかかりそうです。興味がある方は QTBUG-61630 に Vote しておくといいでしょう。

Qt 5.12 LTS β版リリース

Qt 5.12 LTS ベータ版がリリースされました。

5.12 の概要については「Qt 5.12 アルファ版リリース」も参照してください。

5.12 は Long Term Support になります。既に LTS としてリリースされている 5.6, 5.9 についてもリリースアナウンスでは説明があります。

Qt 5.6 は 2019年3月までサポート期間が残っていますが、Very Strict フェーズに移行しており、重大なバグやセキュリティ修正のみが対象となります。新しいパッチリリース(5.6.4)は予定されていません。より新しいマイナーリリースへの移行が推奨されており、実質的にはサポートはほぼ終了している状態です。今も 5.6 を使うのは LGPLv3 が課題となっているケースが多いと思うので、個人的にはサポート期限前に最後のパッチリリースを出して欲しいところですが。

Qt 5.9 は今年の2月から Strict フェーズに移行しており、バグの修正はデグレーションなどの問題が発生しないように慎重に行われています。こちらは 5.9.7 のリリースも予定されており、しばらくはメンテナンスされると思われます。

ちなみに、現在の Qt Project の運営は QUIP で定義されています。LTS の各フェーズや、Qt のリポジトリのブランチの扱い方などに興味がある方は参照してください。Strict フェーズや Very Strict フェーズについては QUIP-0005 に記載されています。

Qt 5.12 アルファ版リリース

Qt 5.12 アルファ版がリリースされました。Qt 5.12 は Qt 5.9 に続く、新たなLTS(Long Term Support)版となります。

オンラインインストーラ使用時には MaintenanceTool を使ってインストールすることも可能です。

Qt Remote Objects モジュールが正式サポートとなりました。

新機能から私が気になったものを以下に挙げます。

“Qt 5.12 アルファ版リリース” の続きを読む

Qt 5.7 アルファ版リリース

Qt 5.7 アルファ版がリリースされました。Qt 5.6.0 が遅れた関係で、アルファ版のリリースそのものは 5.6.0 のリリースの前に行われています。

Qt 5.7 では環境面での変化が大きいため注意してください。

  • ライセンスの整理が行われ、LGPLv2 が選択肢から無くなります。LGPL 版が必要な場合は LGPLv3 のみ選択可能です。また、モジュールによっては LGPL が提供されず、GPLv3 版か商用版のみになります(商用版からオープンソース版が追加されたモジュールなど)。
  • C++11 が必須となります。そのため、利用可能なコンパイラなどが 5.6 までと比べて大きく変わる予定となっています。

5.7 の主な新機能は以下の通りです。

  • Qt WebEngine: Chromium 49 ベースに更新
  • Qt QML: QJSEngine 用デバッガ
  • Qt Quick: QQuickWindow とその派生クラス用インスペクタ
  • Qt Bluetooth: (BLUZのみ) Low Energy peripheral role(子機用API?)
  • Qt 3D: 正式リリース
  • Qt Quick Controls 2: 正式リリース
  • Qt SerialBus: 正式リリース
  • Qt Charts: オープンソース版をリリース
  • Qt Data Visualization: オープンソース版をリリース
  • Qt Virtual Keyboard: オープンソース版をリリース
  • Qt Purchasing: オープンソース版をリリース
  • Qt Quick 2D Renderer: オープンソース版をリリース
  • Qt Wayland Compositor: テクニカルプレビュー版リリース
  • Qt SCXML: テクニカルプレビュー版リリース
  • Qt Script: 非推奨へ
  • Qt Enginio: リリースバイナリから削除

Qt 5.6.0 リリース

Qt 5.6.0 がリリースされました。

当初の予定から三ヶ月遅れましたが、ようやく Qt 5.6 がリリースされました。Qt 5.6 は 最低3年間サポートする Long Term Support(LTS) 版となります。商用版のサポートを利用している人はこれまでも2年以上の期間のサポートされていましたので、そんなに変わらないのではないかと思われるかもしれません。しかし、Qt Project のサポートと The Qt Company のサポートは意味合いが全く異なることに注意してください。

これまでの Qt のリリースポリシーでは「パッチは基本的に最新バージョンにのみ適用(セキュリティパッチは除く)」としていました。メジャーバージョンの変更時(ex. Qt4 → Qt5)では古いバージョンが長くメンテナンスされることもありましたが、バグ修正は基本的に最新版に対して行われ、旧バージョンが修正されるかどうかはケースバイケースでした。また、商用サポートでは Q&A に対応してバックポートパッチを出すことはありますがマイナーバージョンが古い Qt が継続的に修正されることはありません。このため、これまでは新しいマイナーバージョンが出ると古いマイナーバージョンが新しくリリースされることはありませんでした。

Qt 5.6 の LTS ではサポート期間バグ修正を行い、パッチリリース(5.6.x)を続けることになっています。

なお、Qt 5.6 は C++11 を必要としない最後の Qt となる予定です。

Qt 5.6 の主な変更点は以下の通りです。

“Qt 5.6.0 リリース” の続きを読む