QtQuick

QML と Qt for Python の連携

Published Saturday September 8th, 2018 | Leave a comment
Posted in Qt for Python | Tags: , ,

この記事は The Qt Blog の QML and Qt for Python interaction を翻訳したものです。 執筆: Friedemann Kleint, 2018年05月14日 QtWidgets というデスクトップのアプリケーション向けの UI 技術に加え、Qt は QML という UI 技術も提供しています。 今回は、Qt for Python で QML をどう使うのかを、declarative/extending/chapter3-bindings を基に大まかに説明をしたいと思います。 まず初めに、.qml ファイルをロードするための基本的な型を見てみましょう。QGuiApplication と QQuickView のインスタンスを生成します。 QML のエレメントがビューのサイズに追従するよう、resizeMode プロパティに SizeRootObjectToView を設定します。 app = QGuiApplication(sys.argv) view = QQuickView() view.setResizeMode(QQuickView.SizeRootObjectToView) その後、ビューの setSource メソッドを使用して QML のロードを行います。 QML […]

Read More

Qt Quick Pointer Handler の紹介

Published Thursday December 7th, 2017 | Leave a comment
Posted in Qt | Tags: , , ,

この記事は The Qt Blog の Say hello to Qt Quick Pointer Handlers を翻訳したものです。 執筆: Shawn Rutledge, 2017年11月23日 Qt Quick でのマルチタッチのサポートは実際のユースケースに対して不完全ではないかいうことをここ数年考えていました。2本指でスケールやローテーションやドラッグを行うための PinchArea や、複数のタッチを感知し JavaScript の簡単な状態遷移でジェスチャーを認識するような用途で利用可能な MultiPointTouchArea をこれまで提供してきました。これ以外の場合では、1)マウスのイベントが先に発生する。2)Qt は一つのマウス(core pointer)のみを想定している。3)QMouseEvent と QTouchEvent(など)に適切な共通の基底クラスが存在していないため別々にイベントが配信される。4)ショートカットが先にハンドリングされるため、タッチのイベントをマウスイベントとして扱いイベントの配信を一元化するのは難しい。これらの理由により、複数の MouseArea や Flickable を同時に使用できないようになっていました。例えば、二つのボタンを同時に押したり、二つのスライダーを同時にスライドさせたりは MouseArea ではできませんでした。 最初は MouseArea や Flickable でタッチイベントのハンドリングをすることでこの問題を解決しようと思いました。しかし、このためのコードは非常に複雑で、QMouseEvent の処理と QTouchEvent の処理をまったく同じように動かすためにはこの二つのコードパスにたいしてまったく同じコードを大量に書くハメになりました。数ヶ月取り組んだ結果、一応動く形にはなりました…が、既存のすべてのテストを通すのが非常に難しく、動作の振る舞いが変わる恐れがあるとの忠告を仲間からは受けました。MouseArea はその名のとおりマウスイベントのハンドリングを目的としているため、タッチイベントのハンドリングをしてしまうと不適切な感じになってしまいます。そして、アプリケーションやコントロールのセットは意図と反して2つのボタンやタブやラジオボタンを同時に押すことが可能になってしまいます。(ということで、オプトイン用のブール型のプロパティを追加して試してみたりはしましたが、それをすべての MouseArea に設定するのはツラいでしょう。)MouseArea と Flickable は協調して動く必要もあり、すべてを正しく動作させるように注意深く変更をする必要がありました。これ自体は可能ではありましたが、いまいち自信がなかったため Qt 5.5 での提供は控えました。 というわけで、試行錯誤を繰り替えした結果、別の方法でこの問題を解決することに落ち着きました。 まず、バイナリの互換性の壊すような […]

Read More

もっともっと Shape!

Published Friday October 13th, 2017 | Leave a comment
Posted in Qt | Tags: , ,

この記事は The Qt Blog の Let There Be More Shapes! を翻訳したものです。 執筆: Laszlo Agocs, 2017年8月10日 Shape エレメントを紹介した前回の記事 に引き続き、今回は 5.10 に追加されるさらなる機能について紹介しようと思います。 Shape エレメントの最初のバージョンでは線形のグラデーションのみがサポートされていました。しかし、放射状のグラデーションと円錐状のグラデーション(これらはすでに QPainter ではサポートされているため、これを実現するためのフラグメントシェーダーはすでに存在するので、このつなぎ込みのみが必要です)が無いため不完全だという社内外からのフィードバックがありました。これを受けて、RadialGradientと ConicalGradientのパッチがすべてマージされました。(紛らわしいことに QtGraphicalEffects にも似たような名前のエレメントが存在しますが、今回のは QtQuick.Shapes 1.0 で利用可能です。) では実際に見てみましょう。前回と今回紹介したコードはすべて こちらのリポジトリ に存在します。 1. 放射状のグラデーション Shape { id: radGradCirc anchors.fill: parent property real r: 60 ShapePath { strokeWidth: 4 strokeColor: “red” fillGradient: RadialGradient { centerX: […]

Read More

Qt 5.9 でのシェーダーバイナリのキャッシュによるパフォーマンスの改善

Published Wednesday April 5th, 2017 | Leave a comment
Posted in Qt | Tags: , , ,

この記事は The Qt Blog の Boosting performance with shader binary caching in Qt 5.9 を翻訳したものです。 執筆: Laszlo Agocs, 2017年3月23日 Qt 5.9 のリリースが近づいてきました。というわけで、Qt Quick (および OpenGL を利用した QPainter の描画)のベースとなっている OpenGL の重要な部分に関して行った、わずかですが非常に便利な改善について紹介したいと思います。 Qt 5.9 のドキュメントのスナップショットを見た方の中には 由緒正しい QOpenGLShaderProgram に追加されたいくつかの機能 に気づいた方もいるかもしれません。これは Qt の内部で利用していた API がこの新しい API になりました。これは実際どういうものでしょうか? ここで説明しているように、これらのシェーダープログラムのバイナリが GL_ARB_get_program_binary もしくは OpenGL ES 3.0 の同様の標準機能を用いてディスクに保存されるようになります。ドライバがこの機能を提供していない場合には、キャッシュがない場合と同様の動作になります。キャッシュファイルは書き込み可能な キャッシュ用の場所 に、グローバルもしくはプロセスごとに生成されます。これにより、2回目以降に同じシェーダーのプログラムが使われる場合のパフォーマンスが大幅に改善されます。 実際にどの程度の改善になるでしょう?これは一概にはなんとも言えません。ここ数年、このようなキャッシュを行うようになったドライバもありますし、パイプラインに似たような機能が実装されているドライバも世の中には存在しますが、現時点で市場に出回っているデバイスでは非常に大きな効果がありました。 ここで実際の数値は気にしないでください。重要なポイントは Qt […]

Read More

Qt Quick の OpenVG 対応

Published Tuesday April 4th, 2017 | Leave a comment
Posted in Qt | Tags: , ,

この記事は The Qt Blog の Getting more out of Qt Quick with OpenVG を翻訳したものです。 執筆: Andy Nichols (nezticle), 2017年3月31日 Qt 5.9 では Qt Quick アプリケーションを OpenVG を利用して描画することが可能になりました。これは EGL と OpenVG によって Qt Quick のシーンを描画するための新しいシーングラフの拡張対応によって可能になりました。Qt for Device Creation が対応している環境の中には、これまでソフトウェアによる描画しか選択肢が無かったハードウェアでもグラフィックスのアクセラレーションが可能になるものがいくつかあります。 OpenVG とは?(既に知っている方は… OpenVG ってマジ? ) OpenVG は 2D のベクターグラフィック向けのハードウェアアクセラレーションの API です。ハードウェアを利用したパスや画像の描画を API として提供しています。OpenVG 1.1 は Khronos Group […]

Read More
Get started today with Qt Download now