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

#include <QApplication>
#include <QWidget>
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>
#include <QTimer>

// 自定义控件：spinbox 与 slider 联动
class SmallWidget : public QWidget {
    Q_OBJECT
public:
    SmallWidget(QWidget* parent = nullptr) : QWidget(parent) {
        QSpinBox* spin = new QSpinBox(this);
        QSlider* slider = new QSlider(Qt::Horizontal, this);
        QHBoxLayout* layout = new QHBoxLayout(this);
        layout->addWidget(spin);
        layout->addWidget(slider);
        // spin 变化 → slider 跟随（Qt5 静态转换选重载）
        connect(spin,
                static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
                slider, &QSlider::setValue);
        // slider 变化 → spin 跟随
        connect(slider, &QSlider::valueChanged, spin, &QSpinBox::setValue);
    }
};

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

#include "custom_widget.moc"
