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);
こうすることで、もとのイメージのまま回転が可能です。