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 Creator 4.8 ベータ版リリース

Qt Creator 4.8 ベータ版がリリースされました。

Qt Creator 4.8 では実験的な機能として Language Server Protocol(以下LSP) のサポートが実装されました。LSPとは元々は Microsoft 社が Visual Studio Code の実装に利用していたプロトコルを公開したもので、IDEやエディタなどで重要なコード補完やシンボルへのジャンプなどのプログラミングで利用頻度の高い高度な機能をプロトコル化したものです。LSP や各言語向けのその実装を利用することで、IDE側は比較的容易に対応するプログラミング言語を増やすことが可能となります。

Qt Creator では LSP を主に Python をサポートするために使用しています。実験的な機能のためデフォルトでは無効化されているため、「ヘルプ」→「プラグインについて」から「LanguageClient」を有効化する必要があります。また、LSPのサーバや設定も同梱されていないため、別途インストールや設定が必要です。

C++やQMLについては現状は既存のコードモデル(C++はClangコードモデル)が利用されています。QML向けLanguage Serverの実装も計画されていますが、現状ではシンタックスハイライトやインデント対応など、LSPだけでは実現できない機能もあるようで、今後がLSPに統一されるかどうかは不明なようです。

この他、Compilation Database や Clang format ベースのインデント機能、Cppcheck を用いた診断機能などが実験的な機能として追加されました。

また、デバッグ機能でデバッガを複数プロセス起動することも可能となりました。

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 Creator 4.7.1 リリース

Qt Creator 4.7.1 がリリースされました。

Qt Creator 4.7.0 の Windows 版では内部で QT_OPENGL 環境変数を設定していた関係で、ユーザーアプリの動作への影響が発生していました。4.7.1 では環境変数を設定を無くしました。Qt Quick や OpenGL 系の動作に影響していましたので、Windows で Qt Creator 4.7.0 を使用していた人は更新をお勧めします。

Qt 5.12 アルファ版リリース

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

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

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

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

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

Qt Creator 4.0 ベータ版リリース

Qt Creator 4.0 ベータ版がリリースされました。

Qt Creator 4.0 の主な新機能は以下の通りです。

  • ライセンスから LGPL を削除(今後は GPLv3 と商用版のデュアルライセンスへ)
  • 以下の商用版の機能がオープンソース版にも追加されます
    • Clang 静的解析
    • ユニットテスト
    • QML Profiler での商用版限定イベント
  • フラットスタイルデザイン
  • CMake サポートの改善
  • 解析モードをデバッグモードへ統合

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: リリースバイナリから削除