記事ディレクトリ
序文
この記事では、QT で非常に重要な知識を説明します。この知識をマスターすると、さまざまな美しいグラフィックの描画をマスターできるようになります。
1.QImageクラス
QImage、QPixmap、QPainter は、Qt での画像処理と描画に使用される重要なクラスです。以下では、これらの各クラスを紹介し、その基本的な使用法を示すサンプル コードを提供します。
QImage クラス:
QImage は、画像データを表現および処理するために使用される Qt のクラスです。画像の読み込み、保存、編集、描画が可能です。以下は、QImage クラスのいくつかの共通機能です。
画像は、ファイル、メモリ、またはその他の画像データ ソースからロードできます。
PNG、JPEG、BMP などの複数の画像形式をサポートします。
画像はトリミング、拡大縮小、回転、変形できます。
ピクセルレベルの編集とアクセスが可能です。
サンプル コード: 空の QImage オブジェクトを作成し、いくつかのグラフィックを描画し、ファイルに保存します。
#include <QImage>
#include <QColor>
int main() {
// 创建一个空白的 QImage 对象,大小为 300x200,颜色为白色
QImage image(300, 200, QImage::Format_RGB32);
image.fill(Qt::white);
// 在图像上绘制一个红色的矩形
QPainter painter(&image);
painter.setPen(Qt::red);
painter.drawRect(50, 50, 200, 100);
// 保存图像到文件
image.save("example.png");
return 0;
}
2.QPixmapクラス
QPixmap クラス:
QPixmap は、ウィンドウまたはウィジェット上に画像を描画するための Qt のクラスです。ボタンやラベルなどのビジュアル インターフェイスの画像要素を作成するためによく使用されます。以下は、QPixmap クラスのいくつかの共通機能です。
メモリ内にイメージを作成するために使用され、通常はウィンドウまたはウィジェットに描画するために使用されます。
複数の画像形式をサポートします。
QPainter 上で描画し、それをウィジェット上に表示できます。
サンプル コード: QPixmap オブジェクトを作成し、いくつかのグラフィックを描画し、それをウィンドウに表示します。
#include <QApplication>
#include <QWidget>
#include <QPixmap>
#include <QPainter>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建一个窗口
QWidget window;
window.setWindowTitle("Pixmap Example");
window.resize(400, 300);
// 创建一个 QPixmap 对象,大小为窗口大小
QPixmap pixmap(window.size());
pixmap.fill(Qt::white);
// 在 QPixmap 上绘制一个蓝色的椭圆
QPainter painter(&pixmap);
painter.setPen(Qt::blue);
painter.drawEllipse(50, 50, 300, 200);
// 显示 QPixmap 在窗口上
window.show();
return app.exec();
}
3.QPainterクラス
Qt では、QPainter は、さまざまな描画デバイスでの描画操作に使用されるコア クラスの 1 つです。QPainter 自体はコントロールやウィンドウではありませんが、多くの場合、ウィジェット、ウィンドウ、およびカスタム描画デバイスで描画操作を実行するために使用されます。QPainter で描画操作を実行するには、通常、ウィジェットまたはウィンドウのイベント ハンドラー関数で QPainter オブジェクトを作成して使用する必要があります。以下は、Qt での QPainter の基本操作とイベント オーバーライド関数の使用方法についてです。
描画イベント機能:
Qt では、ウィジェットとウィンドウは、paintEvent と呼ばれるイベント ハンドラーをオーバーライドして描画操作を実行できます。この関数では、QPainter オブジェクトを作成し、それを使用してグラフィックスやテキストなどを描画できます。
例:
void MyWidget::paintEvent(QPaintEvent *event) {
QPainter painter(this); // 创建一个 QPainter 对象,绘制在当前小部件上
painter.setPen(Qt::red); // 设置画笔颜色为红色
painter.drawLine(10, 10, 100, 100); // 绘制一条红色线段
// 绘制更多图形和文本...
}
この例では、paintEvent 関数が QPainter オブジェクトを作成し、それを使用して赤い線分を描画します。
2. 手動描画:
PaintEvent関数での描画に加えて、QPainterオブジェクトを別の場所に手動で作成して描画に使用し、QPaintDevice::update()関数を使用して再描画操作をトリガーすることもできます。
例:
void MyWidget::someFunction() {
QPainter painter(this); // 创建一个 QPainter 对象
painter.setPen(Qt::blue); // 设置画笔颜色为蓝色
painter.drawRect(50, 50, 100, 100); // 绘制一个蓝色矩形
update(); // 触发重绘操作,调用 paintEvent
}
3. 描画座標系:
この例では、 someFunction 関数が QPainter オブジェクトを手動で作成し、その中に青い四角形を描画します。次に、update() を呼び出して再描画操作を要求し、paintEvent の実行をトリガーします。
QPainter は座標系を使用して描画デバイス上の位置を決定します。デフォルトでは、座標の原点は左上隅にあり、x は右に増加し、y は下に増加します。QPainter::translate() 関数を使用して、座標系の原点位置を変更できます。
例:
void MyWidget::paintEvent(QPaintEvent *event) {
QPainter painter(this);
painter.translate(100, 100); // 将坐标原点平移到 (100, 100) 处
painter.drawRect(0, 0, 50, 50); // 在新坐标系统中绘制矩形
}
この例では、translate 関数は座標原点を (100, 100) に移動し、新しい座標系で四角形を描画します。
これらは、Qt の QPainter を使用した描画操作の基本的な操作と概念です。イベントハンドラーをオーバーライドし、その中で QPainter オブジェクトを作成して使用することで、アプリケーションのニーズに合わせてペイントされたウィジェットやウィンドウの外観をカスタマイズできます。
要約する
この記事はここで終わります。また次の記事でお会いしましょう。