// ============================================================================
//  qpicture_io  —  Qt 桌面示例
//  来源：川大 C++/LinuxC wiki「02.Qt方向」
//  原文片段：[58954548:4]
//  说明：本文件由 gen_part3.py 从 wiki 片段生成（必要时补 main/QApplication
//        外壳、include、修正笔误）。详见 docs/ERRATA.md。
//        离屏验证：QT_QPA_PLATFORM=offscreen tools/run_qt.sh <target>（自动退出）
// ============================================================================

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QPicture>
#include <QDebug>
#include <QTimer>

class PaintWidget : public QWidget {
    Q_OBJECT
public:
    PaintWidget(QWidget* parent = nullptr) : QWidget(parent) { setFixedSize(200, 200); }
protected:
    void paintEvent(QPaintEvent*) override {
        // QPicture 记录并回放绘图指令
        QPicture picture;
        QPainter painter;
        painter.begin(&picture);            // 把绘图记录到 picture
        painter.drawLine(10, 10, 100, 100);
        painter.end();
        picture.save("drawing.pic");       // 保存（用相对路径，跨平台）

        QPicture picture2;
        picture2.load("drawing.pic");      // 回放
        QPainter p2(this);
        p2.drawPicture(10, 10, picture2);
        qDebug() << "QPicture saved & replayed";
    }
};

int main(int argc, char* argv[]) {
    QApplication app(argc, argv);
    PaintWidget w;
    w.show();
    // 仅在离屏自动化验证时（QT_QPA_PLATFORM=offscreen）200ms 后自动退出；
    // 正常运行（有显示环境）窗口保持打开，不自动退出。
    if (qgetenv("QT_QPA_PLATFORM") == "offscreen") {
        QTimer::singleShot(200, &app, &QApplication::quit);
    }
    return app.exec();
}

#include "qpicture_io.moc"
