##QGraphicsViewとは
Qtの2DGraphicsAPi
##Box2Dとは
言わずとしれた、C++で実装された2D物理エンジン
##なぜQGraphicsViewを使うのか
OpenGL ES めんどくさい。
テクスチャ読み込みとか、Box2D→OpenGL ESの変換とか、その他諸々
QGraphicsView で描画できるもの
円
QGraphicsEllipseItem
描画できます。
矩形
QGraphicsRectItem
描画できます。
多角形
QGraphicsPolygonItem
もちろん、描画できます。
画像
QGraphicsPixmapItem
当然
動画
QGraphicsVideoItem
文字
QGraphicsTextItem
何より
QGraphicsSceneで、
クリックした座標、クリックされたQGraphicsItemのポインタが取得出来ます。
##実装
たいしたコードではないですが、githubに置きます。
QGraphicsItemの円、矩形、ポリゴンは、
頂点座標のスケールさえ変換すればBox2Dと相互に利用できます。
//Box2Dでは32px=1メートルが推奨
QGraphicsPixmapItemの座標は、左上基準なので回転などを上手く表示出来ません。
QGraphicsEllipseItemかQGraphicsRectItemの子アイテムに設定して、左上の絶対座標を設定します。
左上の絶対座標はQGraphicsEllipseItem,QGraphicsRectItemのコンストラクタ引数のQRectから流用すればOK
QGraphicsViewはその名の通り描画のみ行うクラスなので、
処理自体はQGraphicsSceneを継承したオブジェクトに記述します。
##おまけ
QAccelerometer
Qt5.1からQAccelerometerクラスが追加され、
スマートフォンやタブレットの加速度センサーにQtからアクセスできるようになりました。
このデモではBox2Dの重力設定に加速度センサーの値を使用しています。
//初期化 重力方向取得モード
Accelerometer->setAccelerationMode(QAccelerometer::Gravity);
Accelerometer->setActive(true);
//読み出し
auto gravity=Accelerometer->reading();
//重力方向取得
gravity.x();gravity.y();
アプリの操作に加速度センサーからの値を用いる場合
プロジェクトにAndroidManifest.xmlを追加して
android.permission.SET_ORIENTATION権限
android:screenOrientation="portrait"or"landscape"
の2つ指定して画面の自動回転とめたほうがいいでしょう。