QWidget::createWindowContainer()

Qt5 になって GUI 関連のアーキテクチャが変更されたことで、QtQuick を表示する QQuickView は QWindow の派生クラスとなりました。Qt4(QtQuick1)の QDeclarativeView は QWidget の派生クラスですから、この辺りの構成は大きく変化したことになります。

これに伴って qt-project.org のフォーラム等でよく見る質問の一つが QWidget の中に QtQuick2 を埋め込みたいと言うものです。これまではこの問題を解決する手法はありませんでしたが、Qt 5.1 で QWidget::createWindowContainer() というメソッドが追加されることになりました。

QQuickView *view = new QQuickView();
...
 
QWidget *container = QWidget::createWindowContainer(view);
container->setMinimumSize(...);
container->setMaximumSize(...);
container->setFocusPolicy(Qt::TabFocus);
 
widgetLayout->addWidget(container);

これは QWindow を引数に渡して、その表示を行う QWidget を生成するメソッドです。基本的に表示のために埋め込むものなので、QWindow と QWidget 間の連携には制限がありますが、これまでの全く出来なかった状態よりはましでしょう。

QML エンジンの内部構造(バインディングの詳細)

先月作成した「Qt Quick 2 のスピード」という記事ですが、こちらの予想以上に読んでいただいているようです。その記事では紹介していませんでしたが、QML エンジンの内部構造については KDAB が “QML Engine Internals” というシリーズの記事を作成しています。興味の有る人は是非そちらも読んでみてください。

今回はその中の “QML Engine Internals, Part 3: Binding Types” を基に 「Qt Quick 2 のスピード」の補足をしてみようと思います。

“QML エンジンの内部構造(バインディングの詳細)” の続きを読む

Windows Runtime 向け Qt5 のポーティングがスタート

Windows Runtime(WinRT) とは Windows 8 のモダン UI のベースとなるプラットフォームです。今までは WinRT への Qt のポーティングは調査中と言うことでしたが、その開始が Digia の Qt blog で宣言されました。

まずは QPainter(QtWidgets) を動かすところからはじめて、ANGLE のポーティングによる OpenGL および QtQuick への対応、また、Qt Creator のプラグインなどを計画しているそうです。コメントによると QtWidgets は既に動いているようです。

詳しいことは Wiki の記述をチェックしてみてください。

こうなると気になってくるのが Windows Phone 8(Windows Phone Runtime)への対応でしょうか。Window Runtime と Windows Phone Runtime の API は共通の部分もあるものの、全く同じものではありませんので、これをそのまま用いることは出来ないかもしれませんが、これをベースに Windows Phone 8 で Qt5 を動かそう としている人もいるようです。

なお、ポーティングが始まったとはいえまだまだリサーチプロジェクトの段階で、今年の後半に予定されている Qt 5.2 である程度の形になることを目標にしているそうです。

Qt Creator 2.7.0 ベータ版リリース

Qt Creator 2.7.0 のβ版 がリリースされました。

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

  • C++11 対応の強化
  • Qt Quick Designer の Qt Quick 2 対応(要 Qt5)
  • キット(Kits)の改善
  • その他

string freeze は次の木曜日、RC 版のリリースはベータ版から二週間後(2/21頃?)を予定しているそうです。

“Qt Creator 2.7.0 ベータ版リリース” の続きを読む

セキュリティアドバイザリー: POSIX 共有メモリが他者から書き込み可能

Mac OS X, Linux を含む Unix 系での QSharedMemory に関するセキュリティアドバイザリーがアナウンスされています。

Qt 5.0.1 以外の Qt 4.4.0 以降のすべての Qt において、QSharedMemory や X11/XCB でバッファ共有に利用されている共有メモリが他者から読み書き可能な状態にあったという問題です。

Qt 5.0.1 では修正済みです(qtbase の変更履歴 の最後で “Important Behavior Changes” として記載されています)。Qt4 系ではリリース予定の 4.8.5 や 4.7.6 を待つか、以下のパッチを適用してください。

パッチの副作用として、異なるユーザ間で共有メモリを共有することが不可能になるほか、setuid された X サーバが動かない環境において、X のパフォーマンス低下があげられます。前者の問題には Qt の新しい API が、後者は X のプロトコル拡張が必要となります。

“セキュリティアドバイザリー: POSIX 共有メモリが他者から書き込み可能” の続きを読む

Qt 5.0.1 リリース

Qt 5.0.1 がリリース されました。基本的には 5.0.0 のバグ修正版になりますが、それ以外にも以下の違いがあります。

  1. QtMultimedia モジュールに対するバイナリ互換性の変更
  2. MinGW 版バイナリパッケージの追加

Qt では本来は同じメジャーバージョン内ではバイナリ互換性を維持することになっていますが、QtMultimedia モジュールで見つかったミス(インターフェースとなる基底クラスのデストラクタが virtual ではない)のため、メモリリークが発生することから今回は例外としてバイナリ互換性を破壊する修正を取り込んでいます。QAudioSystemFactoryInterface や QMediaServiceProviderFactoryInterface を継承したコードを 5.0.0 で書いていた人は 5.0.1 で再コンパイルしてください。

また、MinGW 用バイナリが用意されました。最新の MinGW が必要となったことから、4.7 プレリリース版を同梱しているため 800MB を超える巨大なパッケージとなってしまいましたが……。

今回から変更履歴が各モジュールごとに分割されています。なお、5.0.0 のパッケージにあったメンテナンスツールでのアップデートは出来ませんので、アップデートには 5.0.0 のアンインストールと 5.0.1 のインストールが必要になります。

Qt Creator 2.6.2 リリース

Qt 5.0.1 のリリースに合わせて、Qt Creator 2.6.2 がリリースされました。

エディタのフリーズやクラッシュを含む多数のバグが修正されていますので、2.6系をお使いの方はバージョンアップをお勧めします。

2.6.1 と同様に単独のパッケージは Qt 4.8 でビルドされたものになります。Qt 5.0 でビルドされたバイナリは Qt 5.0.l のバイナリパッケージに含まれています。