ブログ

Qt5で子ウィジェット内で描画したい場合

at_mangetsu
2016年5月27日 18時03分

Qt上でQPainterで図形描画をさせる場合、
MainWindow上にある子ウィジェットに対してはそのままでは描画することができません。
Qtでは子ウィジェットの中で描画をさせる必要があるため、
描画するには子ウィジェットクラスのpaintEvent()メソッドをオーバーライドする必要があります。
ここでは、オーバーライドさせてQPainterを使う方法をご紹介します。

1..Qt Designer上でメニューバーから「ファイル」-「ファイル/プロジェクトの新規作成」を選びます。
2.テンプレートを指定します。
・ファイルとクラス:Qt
・Qt Designerフォームクラス
を選択します。

3.フォームテンプレートを選択し、ファイル名を決定します。

4.生成されたヘッダファイルに以下を追記します。

protected:
    void paintEvent(QPaintEvent*);

5.生成されたcppファイルに以下を追記します。

void GraphArea::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
   : (必要なコードを記載)
}

6.4,5)でメンテナンスされたクラスをMainWindowでインスタンス化する等して使います。
描画イベントの際にpaintEvent()メソッドが呼び出され、描画されます。