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

Qt Creator 4.8.0 がリリースされています。

Language Server Protocol

実験的ですが「Language Server Protocol」に対応しました。Language Server Protocol(LSP)は統合開発環境(IDE)やコーディング向けエディタで重要なコード補完やナビゲーション、コード診断などの機能を提供するためのプロトコルです。元々は Microsoft が Visual Studio Code 向けに開発したものをオープンソース化したもので、LSP を使用することで様々なプログラミング言語への対応を比較的容易にIDEに実装することができます。

Qt Creator では主に Qt for Python のサポートのために LSP を使用しています。コード全体のハイライトなど LSP がサポートしていない機能もあることや、QML 用の LSP 実装が存在していない(QTBUG-68406)こともあり、これまでの C++/QML 向けコードも出るの実装が LSP に統一されるかどうかはまだ不明です。

C++

Clangコードモデルが LLVM 7.0 ベースになるなど、C++関連にもいくつかの更新が行われています。実験的な機能ですが Compilation Database のエクスポートやプロジェクトとしてのインポートにも対応しました。

デバッグ

複数のデバッガをQt Creator内で同時に起動することができるようになりました。

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 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 を使用していた人は更新をお勧めします。