asaのブログ

プログラミングの勉強まとめ

Qtチュートリアル5(PaintEvent)

 今回は "Basic Drawing Example | Qt Widgets 5.9"を参考にQtによる描画を学習します。PaintEventの復習も兼ねて上のサンプルから要点だけ取り出しました。

f:id:asa_r:20170629221734p:plain

 

 コード

gist958b6a9410d9842224d0d0e68d2d57dc

 

 内容

 サンプルでは描画機能を網羅的に解説するため、さまざまな機能を追加していました。今回はそこから線の太さを変えることだけを抜き出して、描画の仕組みが分かるようにしてみました。

 

 描画を行うRenderArea、線の太さを変えるSpinBox、そのLabelというGUI構成です。

 コンストラクタで行うことは端的に言うと下の通りです。

  •  GUIの構成
  •  シグナルとスロットの接続
  •  各種初期化

 以上を済ませたら、スロットの実装に取り掛かります。

 

 スロットではスピンボックスから値を取得し、それをRenderAreaのスロットに渡しています。RenderAreaのスロットでupdateを呼び出しているので、スピンボックスの値が変わった瞬間に線の太さが変わり、それが再描画されます。

 

 PaintEventはとくに動きがありません。線の太さの調節はスピンボックスにつながったスロットで処理されて、自身は再描画の要求がある度に描画を行うだけです。

 

 サンプルの描画の仕組みはこのようになっていて、他のものも同様の考え方で実装することができます。