12,925
回編集
472行目: | 472行目: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | |||
==== モノクロパターン生成器 ==== | |||
以下の例では、ランダムなモノクロパターンを生成し表示するウィジェットクラスを定義している。<br> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// MonochromePatternGenerator.hファイル | |||
#include <QWidget> | |||
#include <QBitmap> | |||
#include <QPainter> | |||
#include <QPushButton> | |||
#include <QVBoxLayout> | |||
#include <QLabel> | |||
#include <QRandomGenerator> | |||
#include <QMessageBox> | |||
class MonochromePatternGenerator : public QWidget | |||
{ | |||
Q_OBJECT | |||
private: | |||
QLabel *patternLabel; // パターン表示用ラベル | |||
QPushButton *generateButton; // パターン生成ボタン | |||
public: | |||
// コンストラクタ: ウィジェットの初期化を行います | |||
MonochromePatternGenerator(QWidget *parent = nullptr) : QWidget(parent) | |||
{ | |||
// パターン表示用ラベル | |||
patternLabel = new QLabel(this); | |||
patternLabel->setAlignment(Qt::AlignCenter); | |||
// パターン生成ボタン | |||
generateButton = new QPushButton("新しいパターンを生成", this); | |||
connect(generateButton, &QPushButton::clicked, this, &MonochromePatternGenerator::generatePattern); | |||
// レイアウトの設定 | |||
QVBoxLayout *layout = new QVBoxLayout(this); | |||
layout->addWidget(patternLabel); | |||
layout->addWidget(generateButton); | |||
setLayout(layout); | |||
// 初期パターンを生成 | |||
generatePattern(); | |||
} | |||
private slots: | |||
// ランダムなモノクロパターンを生成するスロット | |||
void generatePattern() | |||
{ | |||
try { | |||
// 100x100ピクセルのビットマップを作成 | |||
QBitmap bitmap(100, 100); | |||
bitmap.fill(Qt::color0); // 黒で初期化 | |||
QPainter painter(&bitmap); | |||
painter.setPen(Qt::color1); // 白で描画 | |||
// ランダムなパターンを生成 | |||
for (int y = 0; y < 100; y++) { | |||
for (int x = 0; x < 100; x++) { | |||
if (QRandomGenerator::global()->generateDouble() > 0.5) { | |||
painter.drawPoint(x, y); | |||
} | |||
} | |||
} | |||
// パターンをラベルに表示 | |||
patternLabel->setPixmap(QPixmap::fromImage(bitmap.toImage().scaled(200, 200, Qt::KeepAspectRatio, Qt::FastTransformation))); | |||
} | |||
catch (const std::exception& e) { | |||
QMessageBox::critical(this, "エラー", QString("パターンの生成に失敗: %1").arg(e.what())); | |||
} | |||
} | |||
}; | |||
</syntaxhighlight> | |||
<br><br> | |||
== QGraphicsViewクラスを使用する == | == QGraphicsViewクラスを使用する == |