はじめに
昨日は、@taniho_0707 さんによる「Qt for Androidで広告を掲載する」という記事でした。モバイルアプリケーションを作ろうと思うと、やはり広告機能は知っておきたいところ。こういう記事はとても貴重ですよね。
さて、今年はなかなか埋まらず苦しい状況ですので、ネタ探しのために、この1年の間に更新された機能の一覧をなんちゃって翻訳してみました。
かなり適当に翻訳してますので、間違いがあったらごめんなさい。
たった1年、されど1年。軽い気持ちで見はじめましたが・・・・多い。ぜひ、ちょっと休憩のお供に、つらつらと眺めてみてやってくださいませ。
新機能一覧
Qt 5.8 (2017/01/27 Released)
追加機能 (既存モジュール)
- Qt Core
- QLatin1Stringに at(), operator[], mid(), right() および left()が追加されました
- Qt GUI
- QTouchEvent はユニークIDと回転を持つようになります
- QImageフォーマット変換時にディザリングをサポートします
- 主にQtWaylandのために、これまでprivateだったQOpenGLTextureBlitter API がpublicとなります
- QFontMetrics・QFontMetricsF・QRawFontへの capHeight()の追加
- copy/pasetメニュー付きのアンドロイドの選択機能追加
- QGuiApplication へ Added applicationDisplayNameChanged() シグナルを追加しました
- Qt Quick
- Qt Quickシーングラフをリファクタリングし、OpenGL依存を取り除き、VulkanやDirect3Dなどその他のグラフィックスAPIのバックエンドを作成できるようにしました。
- Qt Quickシーングラフのソフトウェアレンダー(Qt Quick 2D Render)を、シーングラフのためのバックエンドとして統合しました
- 小さな領域の変化時に、フルスクリーンの更新が行われないよう、シーングラフのソフトウェアバックエンド(2D Renderer)に部分的な更新サポートを実装した
- [実験な機能] Direct3D 12 バックエンドの追加
- .qml/.jsファイルから生成するコードとデータ構造のディスクキャッシュを実装し、起動時間とメモリ消費量を削減しました。結果として生成される.qmlcおよび.jscキャッシュファイルはメモリにマップされます。
- タッチおよびマウスイベント配信の整理と、そのための内部クラスとしてQQuickPointerEvent を追加しました。これは、入力イベントハンドリングの今後の改善の基礎となりますが、Qt Quickのコードではまだ利用されていません。
- Qt Quick Controls 2
- 新しいQMLタイプの追加 : Dialog, DialogButtonBox, MenuSeparator, RoundButton, および ToolSeparator
- マテリアルスタイルにリップルエフェクトを追加
- マテリアルとユニバーサルスタイルに、ホバーエフェクトを追加
- マテリアルとユニバーサルスタイルに"システム"テーマを追加
- MenuBar, Menu, SystemTrayIcon, ColorDialog, FontDialog, MessageDialog, FileDialog および FolderDialogといった新しい実験的な"プラットフォーム”QMLタイプの追加
- Qt WebEngine
- Chromium 53の採用
- Windows: MSVC 2015 Update 2以降が必要
- view-source: スキームのサポート
- Hunspellを使ったスペルチェック
- QML APIでツールチップ (HTML5 グローバルタイトル属性)のサポート
- ユーザースクリプトでメタデータ (@include, @exclude, @match)のサポート
- Qt WebEngine (QML) カスタムダイアログ・コンテキストメニュー定義を可能とします
- EGLFSでのQt WebEngine (QML)で、Qt Quick Controls2はビルトインダイアログを使います
- 印刷のサポート
- CSS背景の印刷可否設定の追加
- chrome: スキームの追加(例: chrome://gpu)
- Qt Location
- ESRIの新しい位置情報プラグイン
- osm, mapbox, hereプラグインの高解像度タイルプラグインサポート
- Mapbox 位置情報プラグインのルーティング対応
- Osmプラグインは、ディレクトリからのソーシングタイルをサポートし、オフラインデータセットとともにアプリケーションを出荷できるようになりました
- タイルは、”unitary”モードをサポートし、タイルのキャッシュサイズ数を指定できるようになりました
- Qt Bluetooth
- macOSとiOSでのBluetooth Low Energy Peripheral サポート
- WinRTでのBluetooth Low Energy Centralサポート
- Qt Multimedia
- オーディオ音量をあるスケールからその他のスケールに変換する(例えば、対数から線形)ため、QAudio::convertVolume() 関数(と対応するQML API)を追加しました
- VideoOutput (QML) は、YUV 4:2:2(YUYV, UYVY)ビデオフレームのレンダリングをサポートしました
- GStreamer バックエンド(Unix)は、QCameraでのビデオプローブをサポートしました
- Qt Network
- サーバー側のTLS PSK暗号スイートのサポート
- 設定可能なDiffie-Hellmanパラメータのサポート
- ネットワークアクセスマネージャにおけるHTTP/2のサポート
- Qt WebSockets
- クライアント側、サーバー側のTLS PSK暗号スイートサポート
- Qt Charts
- ローソク足チャート型の追加
- Qt 3D
- 変更の主眼点(パフォーマンスの向上、バグ修正、テストカバレッジの改善)
- WaylandのQPainterを使ったテクスチャの描画
- Qt3Dアスペクトにコマンドを発行するようなオプションのサポート(例えばプロファイラ)
- フレームグラフノードのスクリーンショット
- Embedded platforms
- GBMとEGLDevice/StreamとともにKMS/DRM上で動作している場合、WGLFSとともにマルチスクリーンのケーパビリティとコンフィギュアビリティを拡張しました
- EGLFSで、ソフトウェアレンダーコンテンツ(QWidget)の90度および180度回転のサポートを追加しました
- VNC support
- QPAバックエンドサポートにVNCを追加。VNCプロトロルを使って、任意のアプリケーションをリモート接続できます。
Configurability (Qt Lite project)
Qt 5.8から、システム設定を書き直し、Qt自体のビルドを簡単にカスタマイズできるようにしました。この機能の主眼は、Device Creationにありますが、モバイルやデスクトップ向けのQtビルドにも利用できます。このシステムにより、Qtから個々の機能やAPIを削除し、デプロイするライブラリセットの軽量化が可能となります。
新規追加モジュール
- Qt Wayland Compositor
- Qt SCXML
- Qt Serial Bus
新規プラットフォーム
- Apple tvOS (technology preview)
- Apple watchOS (technology preview)
Qt 5.9 (2017/05/31 Released)
追加機能 (既存モジュール)
- Qt Core
- qfloat16クラスの追加.
- QProcessEnvironment はiOS, tvOS, watchOS, VxWorksをサポートしました
- QRegularExpression はPCRE2ライブラリ(バージョン10.20以上)が必要となります。 PCRE1ライブラリサポートは廃止となります。PCRE2のコピーがQtともに配布され、プラットフォームに無い場合は自動的に利用されます
- オペレーティングシステムとバージョンを簡単に取得するためのQOperatingSystemVersion クラスの追加
- Qt GUI
- QPainterのGLエンジンは、OpenGLコンテキストのコアプロファイルでも機能します
- QImage は、データの変更を伴わないフォーマット変換のためreinterpretAsFormatを導入しました。
- OpenGL ES 3.1以降で、QOpenGLShaderとQOpenGLShaderProgram は、Compute shadersをサポートします
- Freetypeを利用しているプラットフォームでは、Freetypeがサポートしている場合、OpenTypeを使ってStem darkeningと、ガンマ補正を行います
- Qt QML
- QMLタイプの事前生成キャッシュのサポート
- Javascriptのパフォーマンス予測とメモリ消費量改善のためガーベージコレクタを書き換えました
- Qt Quick
- QtGUI(QPainterのGL描画エンジン)とQt Quickシーングラフが、shader programバイナリをディスクにキャッシュし、アプリケーションの起動と表示初期化時間が短縮されました
- Qt QuickのためのOpenVGバックエンドの追加
- Window-screen associationsは、Window.screen と Qt.application.screensによりQMLから直接生成できるようになりました。これにより、C++コードを使わなくても、デスクトップおよび組み込みでマルチスクリーン認識アプリケーションを作成できるようになります
- Textエレメントのレンダリングに実際い使われた本との情報のクエリ手段を追加しました
- プロセス間でデコードされたイメージデータとメモリを共有できるイメージプロバイダを追加しました
- Qt Quick Controls 2
- 新しいQMLタイプの導入: DelayButton, ScrollView
- ボタンとスライダーのマルチタッチサポートを追加
- 編集可能な ComboBox
- 非インタラクティブな永続ドロワー
- Slider, RangeSlider, Dialeへの即時更新機能(デフォルト)
- スライダー、ダイヤル、スクロールバーは、マウスに即時反応します。フリック入力との競合をさけるためドラッグ閾値は、タッチにのみ対応します。
- ユーザーインタラクションのための専用シグナル追加
- AbstractButton::toggled(), Slider::moved(), SpinBox::valueModified(), ...
- ScrollBarでのインクリメンタル・ディスクリートスクロール
- SwipeDelegateは、スワイプを使った有効、無効やプログラムによる開閉(原文はopening、swipeした時の挙動の制御の事と思います)を可能とします
- 垂直 SwipeView
- Qt WebEngine
- バックエンドをChromium 56に更新
- 新しいChromiumビルドシステム GNへ内部的に切り替え
- HTTP POSTのローディングAPI
- QQuickWebEngineProfilesは、ユーザースクリプトを持つことができ、QQuickWebEngineUserScripts はC++から利用できるようになりました
- DownloadItemsは、中断や失敗の要因を取得できるようになりました
- Qt SerialBus
- CAN FD Bitrate Switch (BRS) と Error State Indicator (ESI) フラグを QCanBusFrameに追加- 利用可能なCANインターフェース情報のためのQCanBusDeviceInfoを追加
- WindowsでSYS-TEC electronic CAN adaptersサポートのためのプラグイン追加
- Qt Location
- マップ傾きポート追加
- マップ回転サポート追加
- マップの傾きと回転のタッチジェスチャー追加
- 複数のマップ要素のスタッキングサポート
- 複数のマップエレメントのトップに著作権表示を柔軟に配置するための新要素 MapCopyrightNotice の追加
- スタイルシートを使ってHTMLのcopyrightをスタイリングできるようになりました
- マップアイテムのレンダリングをプラグインに渡す機能のサポート
- mapbox-gl-nativeマッピングエンジンをベースとする新しい"MapboxGL"プラグインのサポート
- viewportにフィッティングする際、表示対象アイテムのみを考慮する新メソッドfitViewportToVisibleMapItems の追加
- 分割されたqml file内の複数のマップアイテムを結合する新しいエレメントの MapItemGroupを追加
- 地図が傾斜している場合、カメラの視界を制御するため、Mapエレメントに視界のプロパティを追加しました
- 実行時にプラグイン固有の機能を公開および制御するための新しいエレメント MapParameterを追加しました
- Lower zoom levelタイルは、それらが利用できるようになるまでhigher zoom levelに近づけ使われるようになります
- iOSでQtPositioningを使うアプリケーションは、バックグラウンドの間にも正しいデータになるようになります
- 背面にあるものを隠さずにマップアイテムをオーバーレイできるようにするため、空のマップを提供する"itemsoverlay"geoserviceプラグインが追加されました
- Qt Multimedia
- 新しい QMLプロパティ:
- CameraCapture.supportedResolutions
- CameraFlash.supportedModes
- MediaPlayer.notifyInterval (オーディオとビデオも同様)
- Video.loops
- 新しい QMLプロパティ:
- Qt Network
- QNetworkAccessManagerにHSTS(HTTP Strict Transport Security)サポートを追加しました
- QNetworkAccessManager (ManulRedirectsPolicy, NoLessSafeRedirectsPolicy, SameOriginRedirectsPolicy, UserVerifiedRedirectsPolicy)にリダイレクトポリシーを追加
- Qt NFC
- Androidサービスとして実行中もNFCを使えるようになります
- AndroidでQNearFieldTarget::sendCommand()を利用することで、ISO-DEP, NFC-A, NFC-B, NFC-F and NFC-V tags/smartcards(例: ドイツeID card)と通信できるようになります
- Qt WebSockets
- 外部のQTcpSocketのハンドリングをサポートします
- Qt Charts
- 対数軸でのマイナーグリッド線サポートを追加
- 凡例マーカーシェープのオプションを追加
- チャートごとの複数の棒グラフをサポート
- Qt 3D
- 3D world内でQt quick 2シーンをテクスチャにレンダリングし相互にやりとりします
- 新しいアニメーションサブシステムのテクニカルプレビュー。スレッドプールでのノンブロッキング名キーフレームアニメーション。Blenderからのアニメーションのエクスポート
- Qt3DExtrasでのPhysics Based Rendering (PBR) マテリアル. 環境マップと共に利用することで、外観が大幅に改善されます
- Qt3DExtrasでの3Dテキストサポート
- 詳細コンポーネントのレベルは、投影されたスクリーンのサイズや距離に基づく切り替えを可能にします。異なるQMLファイルから読み込むための便利なローダークラスを提供します
- メッシュがプラグインベースとなります。 Wavefront OBJ, PLY および FBX フォーマットプラグインを提供しています. それ以外も簡単に追加できます
- Distanceフィールドは、2Dテクスチャテキストに基づきます。自由に回転することが出来ますが、平面形状に基づきます。
- Qt Virtual Keyboard
- (デスクトップ)キーボード専用の選択ハンドルのサポート
- シフトキーがダブルクリックされた場合のシフトハンドラーの振るまいが、caps lockを有効にするだけに変更されます
- ビルトインキーボードのレイアウトの除外と上書きのできる外部キーボードレイアウトを追加
- 入力言語の素早い選択のため、言語選択ポップアップを追加
- 候補リストに残っている単語の自動選択をサポートしました
- 単語候補リストは、非アクティブになると自動的に非表示になるようにしました
- フルスクリーン入力モードの追加
- Embedded platforms
- 廃止予定のfdevモデルをサポートしていない(あるいはfbdevエミュレーションに問題のある)デバイスを助けるために、linuxfbプラットフォームプラグインに実験的なDRM ダムバッファサポートを追加しました。
- evdevtouch プラグインのサポート。タッチイベントのフィルタリングと予測をサポートします
- Qt Bluetooth
- WinRDにClassic Bluetoothのサポートを追加
- Android Peripheral サポートの追加
新規モジュール
- Qt Gamepad
このモジュールは、gamepadコントローラの入力を、多様なプラットフォーム上のC++およびQMLアプリケーションに提供します
プラットフォーム変更点
- リアルタイムOSであるINTEGRITY のサポート
- QNX version 7.0のサポート
- Windows8.1のWinRTサポートの廃止
- GCCプラットフォームにおけるデバッグビルドは、デフォルトで最適化に-Ogオプションを利用するようになります。設定フラグの-no-optimize-debugを利用すると無効にできます。
- リリースビルドはサイズでの最適化が利用できます(gcc/clangでは-Os, MSVCでは-O1). バイナリのサイズを5-20%削減できます。デフォルトはOFFですが、 -optimize-sizeで有効にできます。
Qt 5.10 (2017/12/07 Release)
追加機能 (既存モジュール)
- Qt Core
- QStringViewの初期実装の追加。幾つか重要なconst QString関数が欠けていますが、インターフェースは完全に機能しています。Qt5.11で完成の見込みです
- QStringViewのconst char*-Latin-1-versionとともに進化したため、QLatin1Stringにも多くの機能が追加されていますStringView.
- 読み込み操作のパフォーマンスを改善するためQIODevice::skip()を追加しました
- マシン依存性のないデータ型解析のため、リトルエンディアンおよびビックエンディアン型が追加されています(qint16_le, quint32_be)
- 高品質の(シードなしもできる)ランダム値をシンプルなAPIで提供するQRandomGeneratorを追加しました
- QFileInfoに、ファイルのメタデータ時間フィールドへのアクセサを追加しました
- QSemaphoreのためRAIIスタイルのQSemaphoreReleaserクラスを追加しました
- 連想コンテナのキーに対する効率的なイテレーションのためにQKeyValueIteratorを追加しました
- Qt GUI
- Windows, Linux (xcb), Android (level 23+)向けのクロスプラットフォームVulkanイネーブラーを追加しました: QVulkanInstance, VulkanSurface型をもつQWindow, QVulkanWindow
- sRGB対応のデフォルト/バッキング フレームバッファを要求するための新しいフラグと関数をQSurfaceFormatとQOpenGLWidgetに追加しました
- OpenGL ES 3.2 API を、QOpenGLExtraFunctionsを通して、クロスプラットフォームに公開しました
- QImagesは2ギガバイト以上のピクセルデータを利用できるようになりました
- QFont::PreferNoShapingスタイルストラテジーを追加しました
- Qt Widgets
- QWidget::createWindowContainer() がAndroidで機能するようになりました
- QOpenGLWidget は、オフスクリーンコンテンツのレンダリングおよび読み込み(グラブ)に利用できるようになりました
- Windowsのダイアログで自動的にでる”What's this”ボタンを抑止するAA_DisableWindowContextHelpButton属性を追加しました
- QTextOption, QTextEdit および QPlainTextEditにtabStopDistance プロパティを追加しました
- QLineEditにselectionStart()を補完するselectionEnd(), selectionLength()を追加しました
- QInputDialogに、getDouble()のステップ量の変更を可能にするためsetDoubleStepを追加しました
- QAbstractItemView, QTreeWidget, QTableWidget および QListWidgetAddedにisPersistentEditorOpen() を追加しました
- 新しいスタイルヒントの追加: SH_TitleBar_ShowToolTipsOnButtons
- QOpenGLWidgetに内部的なテクスチャフォーマットをカスタマイズの指定するサポートを追加しました
- QDockWidgetには、並べたまま一緒にドロップすることができるようになります
- Qt Network
- OpenSSL 1.1 バックエンド採用.
- (QSettingベースの)QNAMでHSTSポリシーの永続補完を追加
- 非SSL HTTP/2で利用されるh2c procotolアップグレードを実装
- Qt QML
- QMLにおけるenum宣言のサポートを追加
- 再翻訳のサポートを追加
- Qt Quick
- QtQuick.Shapes 1.0としてShape型を提供するシェイププラグインを追加。これにより、ストロークおよび塗りつぶしパスをQt Quick sceneに追加できます。こういったシェイプは、ジオメトリを生成するか、GL_NV_path_rendering拡張を使ってレンダリングされます。
- TapHandler, PinchHandler および DragHandler を提供する Qt.labs.handlersプラグインを追加しました。これらは、常々話してきたPointerハンドラのはじまりです: デバイスに依存しない方法で、マウスやタッチスクリーンのイベントをハンドリングする軽量なオブジェクトになります
- QQuickItemレイヤは、layer.samplesプロパティを通じてマルチサンプルフレームバッファによる支援を要求できるようになります
- フォント形状サブシステムによる高度な制御のため font.kerning と font.preferShaping プロパティを追加しました
- Textに印刷拡張幅を読み出すadvanceプロパティーを追加しました
- (ETC1/2をサポートするプラットフォーム上で)Imageエレメントに、.pkfファイルから直接ETC1/ETC2圧縮テクスチャの読み込みサポートを追加しました
- Qt Quick Controls 2
- 新しいQML型の導入: Action, ActionGroup, MenuBar
- 新しいスタイルの導入:
- Fusionスタイルは、プラットフォームに依存しないデスクトップ指向の外観を提供します
- Imagineスタイルは、定義済みの命名規則を使ったイメージアセットに基づきます
- サポートの追加:
- ボタン、デリゲータ、メニューでにアクションおよびアイコンのサポート
- 非排他的なボタングループ
- ネストされたメニューと、カスケードサブメニュー
- 円形スピンボックス(wrapping spinboxes) - 最大値を超えると最小値になるスピンボックス機構
- パレットの伝播 (Default、Fusion、Imagineスタイルのみ。その他は今後サポート予定)
- qtquickcontrols2.confでのデフォルトのフォントとパレットの指定
- ボタン、メニュー、メニューバーのニーモニック
- 新しいメンバーの追加:
- TabBar::index, tabBarとpositionにプロパティを追加:
- Dialog::applied(), reset(), discarded(), およびhelpRequested() シグナル追加
- Dialog::standardButton() メソッド
- StackView::empty プロパティ
- Menu::popup() および dismiss() メソッド
- Menu::actionAt(), addAction(), insertAction(), removeAction(), および takeAction() メソッド
- Menu::menuAt(), addMenu(), insertMenu(), removeMenu(), および takeMenu() メソッド
- Menu::count と currentIndex プロパティ
- MenuItem::menu パティ
- Container::removeItem(Item) と takeItem(int) メソッド(TabBar および SwipeView)
- Popup::enabled, mirrored, と opened プロパティ
- orientalプロパティをもつすべてのコントロールに"horizontal" と "vertical" プロパティを追加: RangeSlider, Slider, ScrollBar, ScrollIndicator, SwipeView
- その他の改善点:
- StackView::clear()のトランジション指定をサポート
- プレーンなwindowで動作する ApplicationWindow::activeFocusControl 作成
- ApplicationWindow以外の背景の調光ポップアップを作成
- マテリアルスタイルは、DialogButtonBoxにAndroidボタンレイアウトを使用します
- デフォルトスタイルのSliderとRangeSliderは視覚的に進捗・範囲を示します
- Qt 3D
- スケルトンアニメーションの技術プレビュー
- アニメーションクロック: クロックから一つ以上の兄メータの再生速度をコントロールします
- フレームバッファビットフレームグラフノード
- 近接フィルタフレームグラフノード
- 例やフィルタリングフレームグラフノードの改善
- シェーダーグラフ: グラフに基づく詳細からフラグメントシェーダーの動的生成
- スプライトシートのサポート
- 点と線のピッキングサポート
- カメラの viewAll コマンド
- オプションのSIMD サポート
- Scene2D: Qt 3DへのQt Quickコンテンツの組み込みと相互作用
- Qt Graphical Effects
- エフェクトがコアプロファイルOpenGLコンテキストでも利用できるようになりました
- Qt WebEngine
- Chromium 61へ更新
- ダウンロードアイテムの一時停止・再開の追加
- JavaScriptからウィンドウをアクティブ化を許可する設定を追加
- スクロールバーを非表示にする設定を追加
- 以前は、QWebPageで利用されていたWebActionsが QWebEnginePageに追加された
- ダウンロードをプログラムで開始するための新しいQWebEnginePage::downloadメソッドの追加
- Qt Serial Bus
- ローカルシステムからCANバスへ送信するためにフレームにマークするローカルエコーフラグをQCanBusFrameに追加しました
- Qt Connectivity
- UWP BluetoothとBLEバックエンドはデスクトップ版Windows(10以降)でも利用できるようになりました
- Qt Virtual Keyboard
- 以下のキーボードレイアウトを追加: ヘブライ語, セルビア語, ハンガリー語, チェコ語, クロアチア語, ブルガリア語, ギリシャ語, エストニア語, オランダ語
- ペルシャ語、アラビア語およびCJK(中国語、日本語、韓国語)のための手書き入力のサポート
- 入力モードの切り替えのための新しいコンポーネント (InputModeKey) の追加
- OpenWNN:
- スマイリーの入力語、スペースを押すとクラッシュしていた問題の修正
- OpenWNNエンジンの修正と最適化
- Qt X11 Extras
- XCBイベントキューを表示するための新しいpeekEventQueue() API を追加しました。これにより、Qt4ベースのアプリケーションをQt5へ移植することができます(Xlibイベント処理関数でX11イベントキューを調べます)。
- Emulator
- 複数画面のサポート
- プラグインのサポート
- QMLベースのデバイスモックアップ
- Device Creation / Boot2Qt
- デバイスイメージを Yocto 2.3 (pyro)に更新
新しいモジュール
- Qt Network Authorization - OAuth1とOAuth2のサポート
- Qt Speech - テキスト読み上げのサポート
技術プレビューモジュール
- Qt Remote Objects (TP2) - プロセスまたはデバイス間でQObjectインターフェース(シグナル、スロット、プロパティ)を簡単に共有できるモジュールです
- Qt WebGL Streaming Plugin - ネットワーク越しにアプリケーションをブラウザにストリームします
最後に
本当にただの羅列で申し訳ありません。気になるところを色々補完してまとめようとか思ってましたが、なんのなんの・・・・無理でした。というわけで、気になる更新を見つけてしまったあなた!ぜひ夜の長い12月に、ちょっと試して、記事にしてみませんか?
Qt Advent Calendar 2017では、あなたのご参加を心から歓迎致します。
明日は、先日も連投されていた @task_jp さんが何か書いて下さるそうです。期待しましょう。