はい、本日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)の位置ではありませんので注意してくださ
実行すると以下のようになります。