Qt 5.1 ベータリリース

Qt 5.1.0 のベータ版がリリースされました。

5.1 の新機能に関しては Qt 5.1 アルファ版の リリース記事 を参考にしてください。

5.1 アルファとの大きな違いは(もちろんバグ修正などもありますが)バイナリパッケージが用意されていることです。5.1 でサポート予定のすべてのパッケージがそろっているわけではありませんが、Windows 用の (ANGLE ではなく) デスクトップ用 OpenGL でビルドしたパッケージや Linux 版のみですが Android 用のパッケージがリリースされています。また、現状はオフライン版のインストーラしかありませんが、正式リリース時にはオンライン版のインストーラも用意される予定です。

プラットフォームとしては Android や iOS のテクノロジープレビュー版に注目が集まっていますが、この他に Windows Embedded Compact 7 に対応予定となっています。

qbs 0.3

(もう一ヶ月も前ですが) Qt の新しいビルドツールとして開発が進められている qbs が 0.3 に達したことが アナウンス されました。

Qt には既に qmake というビルドツールがありますが、(特に大規模あるいは複雑なプロジェクトを作成するときに)柔軟性に欠け分かりにくいとその評判は決して良いものではありません。そこで新たなビルドツールの検討として qbs の開発が進められています。

qbs と qmake の一番大きな違いは qmake は make や Visual Studio や XCode のプロジェクトなど各プラットフォームネイティブのビルドツール用のファイルを生成する間接的なビルドツールであるのに対して、qbs は(cmake のように)それ自身がビルドを実行するツールであることです。

qbs ではプロジェクトファイルの形式も QML のような宣言型の文法を採用しており、qmake に比べるとより柔軟にプロジェクトを提議することが出来ます。qmake を用いた場合よりも高速化されており、(qmake で言う DEFINES のような) コンパイル設定の変更による再ビルドのサポートなどのメリットがあります。

デメリットとしては現状 Qt Creator 以外の IDE との連携が出来ないこと、ビルドに Qt(QtScript) が必要であることがあります。このため、qmake を完全に置き換えるのは(Qt Project としては)大変かもしれません。

気になった方はまずは Quick Reference を読んでみてください。

Windows で Qt5 が遅いわけ

Windows で Qt5 を使ってみて遅くなったと感じたことはありませんか。Qt Quick 2 を使っていて遅い場合は ANGLE が問題になっていることも多いのですが、Widget ベースのアプリではどうでしょうか。qt-project.org の interest メーリングリストで Qt5 が Qt4 に比べて明らかに遅くなっていたという話題が出てましたので、ちょっと紹介してみます。

それからもう一つ、Qt5 に限らないと思いますが MinGW 版のバイナリが Visual Studio 版よりも遅いことについての話とその対策案も紹介します。

続きを読む

QML エンジンの進化 その1

QML は JavaScript をベースに作成された言語です。そのため、QML の言語処理系には JavaScript エンジンを使用しています。Qt4 では JavaScriptCore を、Qt5 ではより速度を求めて V8 JavaScript Engine を採用しました。Qt5 では V8 の採用とそれ以外の最適化などで Qt Quick のパフォーマンス向上を果たしましたが、徐々にその限界も見えつつあります。その限界と次のステップを解説する第一弾として “Evolution of the QML engine, part 1” が Qt Blog に投稿されました。面白い記事ですので、ざっくりと訳してみることにします。

さて、現状の V8 の利用にどのような問題があるのでしょうか

続きを読む

Visual Studio Add-In 1.2.1 for Qt 5 リリース

Visual Studio Add-In 1.2.1 for Qt 5 がリリースされました。

主な変更内容は以下の通りです。

  • Visual Studio 2012 のデバッガーで Qt5 のクラスをサポート
  • Visual Studio Add-In for Qt 4 との切替による共存を可能に
  • Qt5 のライブラリ名やインクルードパスの間違いを修正
  • 商用版のみ: Qt Quick サポートの追加(プロジェクトウィザード、キーワードハイライト、プレビュー)

Qt 5.0.2 リリース

Qt 5.0 系のパッチリリースとなる 5.0.2 がリリース されました。多くのバグ修正が行われていますが、主なものはバイナリパッケージやビルドに関連するもののようです。

  • VS2012 でビルドした Windows 用バイナリパッケージ(ANGLE 版) と VS2010 でビルドした Windows 用バイナリパッケージ(デスクトップ OpenGL 版)
  • 同梱する Qt Creator を 2.7.0 に更新
  • configure 時に -skip オプションでビルドしないモジュールの選択が可能に
  • static ビルド対応
  • その他 600 以上の改善

これまでは Windows 版のバイナリパッケージは ANGLE 版しかなく問題も色々と発生していましたが、デスクトップ OpenGL 版も用意されました。OpenGL 系の機能を使う方は ANGLE 版ではなく OpenGL 版を使用してください。

Qt のプロパティシステム

Qt のオブジェクトシステム( QObject と関連クラス)にはプロパティのシステムが用意されています。C++ だけを使用してプログラムするときには意識する必要はほとんどありませんが、Qt Script や Qt WebKit、QML などが C++ と連携する場合には非常に重要な仕組みです。この記事では Qt のプロパティシステムと、Qt 5.1 で追加される MEMBER 指定子について簡単に説明します。

プロパティとは

まず、プロパティとは何でしょうか。プロパティはオブジェクトの属性のことです。例えば、QWidget であればその幅( width )や高さ( height )、QLabel であればその文字列( text )などがプロパティになります。

C++ ではそれらのプロパティの値は getter と呼ばれる関数を通じて取得し、setter と呼ばれる関数で設定します。先ほどの QLabel の場合、QLabel::text() が getter で、QLabel::setText() が setter になります。このように C++ ではメンバー関数を通じて利用するために getter で取得する値がプロパティかどうかは意識することはまずありませんが、たとえば QML でアクセスする場合には getter / setter はエンジン側で自動的に使用され、ユーザーからはプロパティは変数のように見えます。

続きを読む

Qt 5.1 アルファ版

Qt 5.1 のアルファ版がリリースされました。

アルファ版ですのでリリースされているのはソースパッケージのみとなります。5.1 の新機能は詳しくは wiki に記載されていますが、主なものを記載しておきます。

続きを読む

Qt 5.1 の OpenGL

KDAB のブログで “OpenGL in Qt 5.1″ というシリーズの記事が公開されています。

Qt 5.1 の OpenGL についての解説というタイトルになっていますが、Part 1 では Qt4 での OpenGL と Qt5 の違いなども記載されていますので、Qt で OpenGL を使っている人には Qt5 の現状を把握するにはちょうど良い記事になっていると思います。OpenGL 3 以降の機能を使うクラスの紹介などもあるので、若干デスクトップ寄りなスタンスではありますが。

続きを読む