Files
scuc-qt-course/docs/teaching/slides/day1.html
T
张宗平 83620c0cf5 教案对齐官方方案书:重写为 5 天 C++/Qt 教学设计,补齐 6 个 Qt 技术缺口示例
- docs/teaching/OUTLINE.md、slides/day1-5.html、index.html:替换此前自定义的
  4 天方案,严格对齐 docs/TRAINING_PLAN_2026.md「C++方向」Day1-5 课堂内容
  (Day6-10 为纯项目实作,不在教案范围)
- docs/teaching/examples/:官方方案书要求但仓库 p03/(wiki 抓取内容) 未覆盖的
  QSS/Model-View/JSON/QThread/QPropertyAnimation/QStateMachine 六个技术点,
  各补一个最小可运行示例 + README 教学文档,均已离屏验证跑通;手工维护,
  不属于 gen_part3.py 生成产物
- 根 CMakeLists.txt:接入 docs/teaching/examples 构建(BUILD_QT_PART 分支内),
  不改动生成器管理的 p01/p03 CMakeLists
- 任务卡改为目标/验收标准/基础知识参考三段式模板,custom.css 配套新增样式
- docs/teaching/PRETEST.md:10 题 10 分钟 C++ 摸底测验,验证教案假定的受众
  基础是否成立,并与 OUTLINE.md §0 的分层预案挂钩
2026-07-02 11:31:44 +08:00

256 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>Day 1 · 开训 + C++ 回顾/工具链</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="reveal/reveal.css">
<link rel="stylesheet" href="reveal/theme.css">
<link rel="stylesheet" href="reveal/plugin/highlight/monokai.css">
<link rel="stylesheet" href="custom.css">
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<h1>Day 1</h1>
<h3>开训 + C++ 回顾/工具链</h3>
<p class="module-badge">C++/Qt 方向实训 · 第 1 / 5 天 · 对齐官方方案书 Day1</p>
<ul>
<li>模块 A(3 课时):团队建设 / 敏捷 Scrum / C++ 在企业中的应用(讨论型,无编码)</li>
<li>模块 B(3 课时):C++ 环境搭建 / 高级程序回顾 / CMake / Vcpkg(压缩讲解)</li>
</ul>
<p><small>本教案假定学员已掌握 C++ 基础语法与 OOP 概念——方案书对今天下午的
官方定位是"回顾和提升",不是零基础教学。今天开始的 5 天覆盖方案书 C++方向
Day1–5 全部课堂内容,Day6–10 是纯项目实作。</small></p>
<div class="verify-box" style="font-size:0.5em;">
<h4>模块 B 开始前:10 分钟摸底测验</h4>
<p>这条假设不是拍脑袋定的——建议模块 B 讲授前先用
<a class="filelink" target="_blank" href="../PRETEST.md">docs/teaching/PRETEST.md</a>
(10 题、10 分钟)实测一次,按结果决定原节奏推进还是回退到语法讲解。</p>
</div>
</section>
<!-- ===================== 模块 A:讲 ===================== -->
<section>
<section>
<p class="module-badge">模块 A · 讲授 35min</p>
<h2>团队建设 / 敏捷 Scrum / C++ 企业应用 <span class="tag tag-lecture"></span></h2>
<ul>
<li>团队建设与文化、实训安排与考评要求</li>
<li>项目开发过程管理全景(JIRA / Git / OASIS / Wiki</li>
<li>敏捷 Scrum 项目开发管理</li>
<li>C++ 在企业中的应用</li>
</ul>
</section>
<section>
<h3>实习实训服务流程 <span class="tag tag-lecture"></span></h3>
<img src="../../images/training_service_flow.png" style="max-height:480px;">
<p><small>出处:<a class="filelink" target="_blank"
href="../../TRAINING_PLAN_2026.md">docs/TRAINING_PLAN_2026.md</a>
「六、实习实训服务流程」——需求分析→需求评审→项目研发/代码实现→阶段评审→
项目测试/交付,这就是接下来 Day6–10 项目实作要走的完整流程。</small></p>
</section>
<section>
<h3>质量保证:四平台一标准 <span class="tag tag-lecture"></span></h3>
<img src="../../images/quality_four_platforms.png" style="max-height:420px;">
<p><small>出处:<a class="filelink" target="_blank"
href="../../TRAINING_PLAN_2026.md">docs/TRAINING_PLAN_2026.md</a>
「七、质量保证」——JIRA(任务跟踪)+ Git(版本管理)+ Wiki 知识库 +
OASIS 绿洲实训管理平台,是接下来项目实作阶段的四个协作工具。</small></p>
</section>
</section>
<!-- ===================== 模块 A:讨论(无编码) ===================== -->
<section>
<section>
<p class="module-badge">模块 A · 讨论 95min(分组,非编码)</p>
<h2>动手:分组讨论 <span class="tag tag-discuss"></span></h2>
<p><small>今天上午没有编码练习——先把协作流程和项目方向定下来,Day6–10
的项目实作会真的用到今天讨论的结论。</small></p>
</section>
<section>
<div class="task-card discuss-card">
<h4>任务卡 1 · 协作分工 <span class="tag tag-discuss"></span></h4>
<dl class="task-spec">
<dt>目标</dt>
<dd>结合服务流程图,说清楚本组打算怎么分工使用 Jira(任务跟踪)+ Git(代码版本管理)</dd>
<dt>验收标准</dt>
<dd>每组提交一句话分工说明(谁负责建 Jira 看板 / 谁负责 Git 仓库初始化),能在图上指出对应环节</dd>
<dt>基础知识 · 参考</dt>
<dd>上一节"实习实训服务流程"图 ·
<a class="filelink" target="_blank" href="../../TRAINING_PLAN_2026.md">TRAINING_PLAN_2026.md 「七、质量保证 (一)(二)」</a></dd>
</dl>
</div>
</section>
<section>
<div class="task-card discuss-card">
<h4>任务卡 2 · 选定项目方向 <span class="tag tag-discuss"></span></h4>
<dl class="task-spec">
<dt>目标</dt>
<dd>选定实训期间打算做的项目方向(Linux C 方向,或 C++/Qt 方向的备选商业项目之一)</dd>
<dt>验收标准</dt>
<dd>每组报出项目名称 + 一句话说明选择理由</dd>
<dt>基础知识 · 参考</dt>
<dd><a class="filelink" target="_blank" href="../../TRAINING_PLAN_2026.md">TRAINING_PLAN_2026.md 「八、备选商业项目介绍」</a></dd>
</dl>
</div>
</section>
</section>
<!-- ===================== 模块 B:讲 ===================== -->
<section>
<section>
<p class="module-badge">模块 B · 讲授 35min(巡礼式,压缩讲解)</p>
<h2>C++ 回顾 / CMake / Vcpkg <span class="tag tag-lecture"></span></h2>
<p><small>只挑「学过但容易讲不透」的点,不逐章展开——方案书官方定位是
"回顾和提升",深度让位于 Day2–5 的 Qt 内容。</small></p>
</section>
<section>
<h3>namespace 作用域 <span class="tag tag-lecture"></span></h3>
<p>"作用域"不是"文件顺序"——很多人误以为 namespace 只是给名字加前缀,
实际上它定义的是一段可以被跨文件延续、跨块合并的作用域。</p>
<p><small>出处:<a class="filelink" target="_blank"
href="../../../p01/ch03/namespace_syntax.cpp">p01/ch03/namespace_syntax.cpp</a>
对照 <a class="filelink" target="_blank" href="../../ERRATA.md">docs/ERRATA.md</a></small></p>
</section>
<section>
<h3>函数重载决议 <span class="tag tag-lecture"></span></h3>
<p>编译器靠"名字改写"name mangling)把重载函数变成不同的符号;二义性
往往不是代码写错了,而是重载集合里存在两个"一样好"的候选。</p>
<p><small>出处:<a class="filelink" target="_blank"
href="../../../p01/ch03/function_overload_mechanism.cpp">p01/ch03/function_overload_mechanism.cpp</a></small></p>
</section>
<section>
<h3>引用的本质 <span class="tag tag-lecture"></span></h3>
<p>把引用理解成"自动解引用的 const 指针"——这个实现视角能解释引用为什么
必须初始化、为什么不能重新绑定。</p>
<p><small>出处:<a class="filelink" target="_blank"
href="../../../p01/ch03/reference_essence.cpp">p01/ch03/reference_essence.cpp</a></small></p>
</section>
<section>
<h3>虚析构与内存泄漏 <span class="tag tag-lecture"></span></h3>
<pre><code class="cpp" data-trim data-noescape>
Base* p = new Derived();
delete p; // 如果 ~Base() 不是 virtual~Derived() 不会被调用——经典泄漏
</code></pre>
<p><small>出处:<a class="filelink" target="_blank"
href="../../../p01/ch04/s08/virtual_dtor_purpose.cpp">p01/ch04/s08/virtual_dtor_purpose.cpp</a></small></p>
</section>
<section>
<h3>模板与 STL 速览 <span class="tag tag-lecture"></span></h3>
<p>只点名,不展开:泛型编程(函数模板/类模板)+ 容器/迭代器,是 Day6–10
项目实作里会大量用到的基础设施。</p>
<p><small>出处:<a class="filelink" target="_blank"
href="../../../p01/ch05/class_template_basics.cpp">p01/ch05/class_template_basics.cpp</a>
<a class="filelink" target="_blank" href="../../../p01/ch09/s03/vector_iterator.cpp">p01/ch09/s03/vector_iterator.cpp</a></small></p>
</section>
<section>
<h3>CMake:用本仓库当教材 <span class="tag tag-lecture"></span></h3>
<pre><code class="bash" data-trim>cmake -S . -B build -G Ninja -DBUILD_QT_PART=OFF -DCMAKE_BUILD_TYPE=Debug
cmake --build build # 144 个目标全绿</code></pre>
<p><small>出处:仓库根 <a class="filelink" target="_blank" href="../../../CMakeLists.txt">CMakeLists.txt</a>——
<code>option(BUILD_QT_PART)</code> 控制是否编译 Qt 部分,每个示例一个
<code>add_executable</code> 目标,这就是"一文件一目标"约定的由来。</small></p>
</section>
<section>
<h3>Vcpkg 包管理器(概念,无演示) <span class="tag tag-lecture"></span></h3>
<p>C++ 生态的包管理器,解决"第三方库怎么装、怎么被 CMake 找到"的问题。</p>
<div class="verify-box">
<h4>缺口说明</h4>
<p>本仓库用的是"隔离 Qt 手动装"<code>tools/install_qt_host.sh</code>
而非 vcpkg,两种思路都要认识;本仓库暂无 vcpkg 可运行示例——安装真实
vcpkg 工具链超出最小示例范畴,此处仅作概念介绍。</p>
</div>
</section>
</section>
<!-- ===================== 模块 B:练 ===================== -->
<section>
<section>
<p class="module-badge">模块 B · 练习 95min</p>
<h2>动手:走一遍真实构建流程 <span class="tag tag-practice"></span></h2>
</section>
<section>
<div class="task-card">
<h4>任务卡 1 · 走一遍真实构建流程 <span class="tag tag-practice"></span></h4>
<dl class="task-spec">
<dt>目标</dt>
<dd>独立完成本仓库 Part1 的配置+构建,不看着教师操作</dd>
<dt>验收标准</dt>
<dd><code>cmake -S . -B build -G Ninja -DBUILD_QT_PART=OFF</code> 配置成功;
<code>cmake --build build</code> 144 个目标全绿;能说出 <code>option(BUILD_QT_PART)</code> 的作用</dd>
<dt>基础知识 · 参考</dt>
<dd><a class="filelink" target="_blank" href="../../../CMakeLists.txt">仓库根 CMakeLists.txt</a> ·
<span class="ext-ref">CMake 官方文档 Tutorial(选读·需联网)</span></dd>
</dl>
</div>
</section>
<section>
<div class="task-card">
<h4>任务卡 2 · 修一个真实的坑 <span class="tag tag-practice"></span></h4>
<dl class="task-spec">
<dt>目标</dt>
<dd><a class="filelink" target="_blank" href="../../ERRATA.md">docs/ERRATA.md</a>
挑 2 条记录,理解"wiki 原文错在哪、现在的写法为什么对"</dd>
<dt>验收标准</dt>
<dd>能用一句话向同组同学解释清楚,不能只念代码</dd>
<dt>基础知识 · 参考</dt>
<dd><a class="filelink" target="_blank" href="../../ERRATA.md">docs/ERRATA.md</a></dd>
</dl>
</div>
</section>
<section>
<div class="task-card">
<h4>任务卡 3(选做)· 版本探针 <span class="tag tag-practice"></span></h4>
<dl class="task-spec">
<dt>目标</dt>
<dd><code>tools/std_probe.py</code> 验证一个标准版本差异点(如三目运算符可否作左值)</dd>
<dt>验收标准</dt>
<dd>跑出至少一个"该标准报错、另一个标准不报错"的对比结果,对照
<a class="filelink" target="_blank" href="../../VERSION_NOTES.md">docs/VERSION_NOTES.md</a> §2</dd>
<dt>基础知识 · 参考</dt>
<dd><a class="filelink" target="_blank" href="../../../tools/std_probe.py">tools/std_probe.py</a> ·
<a class="filelink" target="_blank" href="../../VERSION_NOTES.md">docs/VERSION_NOTES.md</a></dd>
</dl>
</div>
</section>
</section>
<!-- ===================== 收尾 ===================== -->
<section>
<h2>当日产出验证</h2>
<div class="verify-box">
<h4>验收</h4>
<pre><code class="bash" data-trim>cmake --build build --target all # Part1144 个目标全绿</code></pre>
<p>每组提交一句话分工说明 + 至少 1 条 ERRATA 坑点讲解。</p>
</div>
<p class="footer-note"><small>明天 Day2 进入 Qt:项目结构 / 信号槽 / 控件 / 布局与 QSS ——
大纲:<a class="filelink" href="../OUTLINE.md">docs/teaching/OUTLINE.md</a></small></p>
<p><a class="filelink" href="index.html">返回目录</a> · <a class="filelink" href="day2.html">下一天 →</a></p>
</section>
</div>
</div>
<script src="reveal/reveal.js"></script>
<script src="reveal/plugin/highlight/highlight.js"></script>
<script>
Reveal.initialize({
hash: true, controls: true, progress: true, center: true, slideNumber: true,
plugins: [ RevealHighlight ]
});
</script>
</body>
</html>