「Qtの基礎 - 画像処理」の版間の差分

ナビゲーションに移動 検索に移動
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クラスを使用する ==

案内メニュー