Qt プログラミング – QWidgetのカスタマイズ-IconEditorクラス
津路です。
Qt プログラミング – QWidgetのカスタマイズでは、簡単に前準備をしました。
IconEditorのソースを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <QtGui> #include "iconeditor.h" IconEditor::IconEditor(QWidget *parent) : QWidget(parent) { setAttribute(Qt::WA_StaticContents); setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); curColor = Qt::black; zoom = 8; image = QImage(16, 16, QImage::Format_ARGB32); image.fill(qRgba(0,0,0,0)); } QSize IconEditor::sizeHint() const { QSize size = zoom * image.size(); if (zoom >= 3) size += QSize(1,1); return size; } |
WA_StaticContentsでは、コンテンツを左上に寄せて、staticとします。
setSizePolicyにminimumを指定すると、sizeHintに従います。つまり、最小のサイズを伝えます。
zoomは、前回宣言した拡大率です。
curColorとは、黒ペンです。
QImageを生成して、半透明がサポートされる32bitARGBフォーマットで初期化します。
ここで、実際に何を作るのか説明しておきます。
アイコンエディタを作るのですが、このIConEditorクラスをQt Designerへと組み込んで、アイコンを描画できるようにするのが目標です。
さて、アイコンのデータは、image変数に格納され、setIconImage()でWrite, iconImage()でリードします。エディタでは、ファイルのオープン時にsetIConImageを、保存時にiconImageを呼び出します。
Qtには、QRgb, QColorの2通りの色の格納方法があります。QRgbは、単なるtypedefで、QImageに32ビットのピクセルデータを格納するためにもいちます。QColorには多くの便利な関数が用意され、広い範囲で用いられています。
今回のウィジェットでは、QImageにはQRgbのみを使用し、他ではすべてQColorを用います。
sizeHint関数は、ウィジェットの望ましいサイズを返します。画像のサイズに拡大率をかけ、3以上の場合には、グリッドの調整のために、縦横両方向に、1ピクセルを加えます。1,2の場合には、ピクセルを表示する余地がなくなってしまうので、グリッド表示を行いません。
Qtのレイアウトマネージャーは、子ウィジェットの配置時に、このサイズヒントを満たそうとします。