Skip to main content
标签ad报错:该广告ID(9)不存在。
  主页 > Qt入门

一个qt/c++ demo,用于显示 T-Square Fractal(T型正方形分形) 分形图

2023-04-24 浏览:
标签ad报错:该广告ID(7)不存在。

#include <QtGui>
#include <QApplication>

class TSquareFractal : public QWidget {
public:
    TSquareFractal(QWidget *parent = 0)
        : QWidget(parent), depth_(0), color_(Qt::white) {
        setWindowTitle("T-Square Fractal");
        resize(800, 600);
        setAutoFillBackground(false);
    }

protected:
    void paintEvent(QPaintEvent *event) override {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);

        QRect rect(10, 10, width() - 20, height() - 20);
        drawTSquareFractal(&painter, rect, depth_);
    }

private:
    void drawTSquareFractal(QPainter *painter, const QRect &rect, int depth) {
        if (depth <= 0) {
            painter->fillRect(rect, color_);
        } else {
            int w = rect.width() / 3;
            int h = rect.height() / 3;

            QRect centerRect(rect.x() + w, rect.y() + h, w, h);
            drawTSquareFractal(painter, centerRect, depth - 1);

            QRect topRect(rect.x() + w, rect.y(), w, h);
            drawTSquareFractal(painter, topRect, depth - 1);

            QRect bottomRect(rect.x() + w, rect.y() + 2 * h, w, h);
            drawTSquareFractal(painter, bottomRect, depth - 1);

            QRect leftRect(rect.x(), rect.y() + h, w, h);
            drawTSquareFractal(painter, leftRect, depth - 1);

            QRect rightRect(rect.x() + 2 * w, rect.y() + h, w, h);
            drawTSquareFractal(painter, rightRect, depth - 1);
        }
    }

private:
    int depth_;
    QColor color_;
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    TSquareFractal fractal;
    fractal.show();

    return app.exec();
}