はい、本日2回目です。
QPainterを用いたQConicalGradientによるブラシ描画をやっていきます。
QConicalGradientは円錐グラデーションです。
下のような感じです。(C++ GUI Programming with Qt4の179ページの図)
これは中心点(Xc, Yc)と角度αで指定します。
サンプルはC++ GUI Programming with Qt4の179ページのものを少し変更して使います。
そして、いつものようにQtCreaterなどでMainWindowなどのGUI部品を定義済みであるとします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
ではコードを
(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);//uiのGUI部品の初期化
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)//←重要!ペイントイベント
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);//アンチエイリアスセット
painter.setPen(QPen(Qt::black, 1));
QConicalGradient gradient(150, 200, 0);
gradient.setColorAt(0.0, Qt::white);//始まりの色
gradient.setColorAt(0.3, Qt::green);
gradient.setColorAt(1.0, Qt::black);//終わりの色
painter.setBrush(gradient);
painter.drawEllipse(50, 100, 200, 200);
}
これも簡単ですね。理解に重要なのはpaintEventだけですので他は無視してしまっても構いません。まずQPainterをthis(この場合MainWindow)で作成し、アンチエイリアスを設定します。その後輪郭描画のためのペンをセットします。
この後QConicalGradientを作成します。この場合中心点(150, 200) 、開始角度0度になります。 (リファレンス)
その後setColorAtを3度呼びだしていますが、これは設定した2点間の異なる3位置で3色を指定しているという意味です。つまり3色のグラデーションになります。位置は0~1の間(float)で指定できます。
それから作成したグラデーションをpainterのブラシにセットし、円を描いています。
※ちなみに円錐グラデーションをブラシにセットした時点で、painterにセットしたコントロール(この場合MainWindow)の左上からの中心点 (150, 200)の位置になります。決してdrawEllipseの際の描画領域の中心点(150, 200)の位置ではありませんので注意してくださ
実行すると以下のようになります。
