2011年12月23日金曜日

( Qt C++ )QPainterを用いた楕円の描画


今日は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の円を描いています。
(各関数はいろいろ種類があるので説明はしません。リファレンスを参照してください。)

実行すると以下のようになります。

 
以上です。