今日は2回投稿します。あとブログ内検索バーつけましたんで存分に利用してください。
さて、今日からC++ GUI Programming with Qt4 8章 2D and 3D Graphics をやっていきます。
今回使うのはQPainterというクラスです。このクラスは図形描画、イメージ描画、テキスト描画などを行うためのクラスです。アンチエイリアスやアルファブレンディング、ベクタパスなどもサポートされています。(細かいことはリファレンスを見てください)
サンプルはC++ GUI Programming with Qt4 178ページのものを使います。 また、QMainWindowはQtCreaterなどで作成済みであるとします。(Qt Createrの使い方はQtをはじめようを見てください。)
それではコードを
(C++ GUI Programming with Qt4 178ページより)
(mainwindow.h)
namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT//マクロ public: explicit MainWindow(QWidget *parent = 0);//コンストラクタ ~MainWindow();//デストラクタ protected: void paintEvent(QPaintEvent *);//←ここ重要!ペイントイベントを記述 private: Ui::MainWindow *ui;//uiにはGUI部品が記述 };
(mainwindow.cpp)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)//uiにはGUI部品が記述 { ui->setupUi(this);//各GUI部品初期化 } MainWindow::~MainWindow() { delete ui; } void MainWindow::paintEvent(QPaintEvent *)//描画イベント { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true);//アンチエイリアスセット painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap)); painter.setBrush(QBrush(Qt::green, Qt::SolidPattern)); painter.drawEllipse(80, 80, 400, 240);//楕円描画 }
割と簡単です。理解に重要なのはpaintEventの部分だけです。MainWindowのペイントイベントが来たらQPainterを使って楕円を描画しています。
painter.setPenはその名の通りペンをセットしています。これは線と図形の輪郭描画に使用されます。DashDotLineやRoundCapなどの種類はここでは説明しません。後でまとめて記事にします。
painter.setBrushもその名のとおりブラシをセットしています。これは図形の塗りつぶしに使用されます。
drawEllipseは楕円描画に使います。x,y=80の位置に幅400、高さ240の円を描いています。
(各関数はいろいろ種類があるので説明はしません。リファレンスを参照してください。)
実行すると以下のようになります。