つくねの手帳

C++およびAndroidアプリ開発メインで何か書きたい

Widgetの回転と枠線について

今回は、組み込み開発などにおいて、LCDの関係などでWidgetを回転させたい。という時に、QGraphicsSceneとQGtaphicsViewを用いた回転方法と、その際にWidgetに対してついてしまう枠線について書きたいと思います。

例によって、Qtのversionは4.8です。

先ず、Widgetの回転についてです。
Widgetの回転は、対象のWidgetをQGraphicsSceneへ渡し、そのQGraphicsSceneをQGraphicsViewへ登録。QGraphicsViewのrotate関数で実現できます。

  QGraphicsScene *scene = new QGraphicsScene();
  scene->addWidget(/*回転させたいWidgetハンドル*/);

  QGraphicsView *view = new QGraphicsView(scene); // QGraphicsViewにsceneを登録
  view->rotate(90); // 90度回転

これで対象のWidgetを回転させられたかと思います。
ただ、このままだとWidgetに1pxの枠線がついてしまうと思います。

  setWindowFlags(Qt::FramelessWindowHint);

などをWidgetに指定しても、消せないのですが、これには理由があります。

先程、回転のためにQGraphicsViewを使用しました。
このクラスは親クラスをたどるとQFrameクラスを継承しています。
その為デフォルト1pxの枠線を描画してしまいます。
枠線を描画したくない場合は、以下のようにQGraphicsViewにオプション指定をしましょう。

  view->setFrameShape(QFrame::NoFrame);

こうすることで、もとのイメージのまま回転が可能です。