讲义更新:Day2 幻灯片补 Designer 表单对照章节 + Day1 PPT + property_animation gif

- day2.html:组装思路改述为「两种信号槽写法」(lambda+context 批量绑定数字/运算键,
  成员函数指针绑定等号/清空/退格);新增「番外:Qt Designer 表单版对照」章节,
  讲 .ui 表单 + uic + setupUi + connectSlotsByName 自动连接,及改 objectName 致
  on_<obj>_<sig>() 静默失败的坑;任务卡补「教师答案(不下发)」。
- day1.pptx:同步更新。
- property_animation/source.gif:属性动画示例演示 gif 资源。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
张宗平
2026-07-09 16:52:06 +08:00
parent d0496675e9
commit d94d9175b1
3 changed files with 43 additions and 2 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 649 KiB

Binary file not shown.
+43 -2
View File
@@ -267,11 +267,49 @@ grid->addWidget(btn9, 0, 2); grid->addWidget(btnDiv, 0, 3); // 行、列坐标
<div class="concept-box">
<h4>组装思路</h4>
<ul>
<li>数字/运算符按钮(上午的 <code>button_creation</code>+ 点击信号槽(刚学的种写法
+ <code>QGridLayout</code> 脚手架排键盘 + <code>QLabel</code>/<code>QLineEdit</code> 显示结果。</li>
<li>数字/运算符按钮(上午的 <code>button_creation</code>+ 点击信号槽(刚学的种写法
lambda+context 批量绑定数字/运算符键,成员函数指针绑定等号/清空/退格)
+ <code>QGridLayout</code> 脚手架排键盘 + <code>QLineEdit</code> 显示结果。</li>
<li>项目 = 已学知识点的组装——这是 Day5 综合案例和 Day6–10 项目的预演。</li>
</ul>
</div>
<p><small>教师完整参考实现(现场先跑成品,再拆代码):
<a class="filelink" target="_blank" href="../examples/calculator/qt_calculator.cpp">examples/calculator/qt_calculator.cpp</a>
<a class="filelink" target="_blank" href="../examples/calculator/README.md">README</a>
<code>QT_QPA_PLATFORM=offscreen tools/run_qt.sh qt_calculator</code> 自测 5 组用例)。
<b>课上不要直接展示源码给学生抄</b>——讲思路,学生自己实现(任务卡 2)。</small></p>
</section>
<section>
<h3>★ 番外:Qt Designer 表单版对照 <span class="tag tag-lecture"></span></h3>
<div class="concept-box">
<h4>核心概念</h4>
<ul>
<li>界面还能用 <b>Qt Designer</b> 拖控件生成 <code>.ui</code> 表单(纯 XML),
<code>uic</code> 编译期翻译成 <code>ui_xxx.h</code><code>setupUi(this)</code>
一次建好控件树——业务逻辑(<code>onDigit</code>/<code>onOperator</code>……)
与代码布局版<b>一字不差</b>,换的只是"界面从哪来"。</li>
<li><code>setupUi()</code> 内部会 <code>connectSlotsByName(this)</code>:类里若有
<code>on_&lt;objectName&gt;_&lt;signal&gt;()</code> 槽会被<b>自动连接</b>——这是
信号槽之外、Designer 工作流特有的第三种"连接方式"。</li>
</ul>
</div>
<div class="pitfall-box">
<h4>常见的坑</h4>
<ul>
<li>把表单里按钮 <code>objectName</code><code>btnClear</code> 改成
<code>btnReset</code><code>on_btnClear_clicked()</code> 不报编译错误、不报运行时
错误,只是从此再也不会被调用——静默失败坑点家族的第三个成员(前两个:旧
<code>SIGNAL()/SLOT()</code> 字符串语法、重复 <code>connect</code>)。
本参考实现故意改用显式 <code>connect()</code> 规避这个坑。</li>
</ul>
</div>
<p><small>对照实现:<a class="filelink" target="_blank"
href="../examples/calculator_designer/qt_calculator_designer.cpp">examples/calculator_designer/qt_calculator_designer.cpp</a>
+ <a class="filelink" target="_blank" href="../examples/calculator_designer/calculator_designer.ui">calculator_designer.ui</a>
<a class="filelink" target="_blank" href="../examples/calculator_designer/README.md">README</a>)——
快速原型/界面调整用 Designer 更直观;控件数量随数据动态变化(如 Day5 表格行)
必须手写代码搭建,两条路线按场景选,不是谁取代谁。</small></p>
</section>
</section>
@@ -294,6 +332,9 @@ grid->addWidget(btn9, 0, 2); grid->addWidget(btnDiv, 0, 3); // 行、列坐标
<dd><a class="filelink" target="_blank" href="../../../p03/ch03/button_creation.cpp">p03/ch03/button_creation.cpp</a> ·
<a class="filelink" target="_blank" href="../../../p03/ch04/custom_signal_slot.cpp">p03/ch04/custom_signal_slot.cpp</a> ·
<a class="filelink" target="_blank" href="../../../p03/ch08/custom_widget.cpp">p03/ch08/custom_widget.cpp</a>(布局参考)</dd>
<dt>教师答案(不下发)</dt>
<dd><a class="filelink" target="_blank" href="../examples/calculator/qt_calculator.cpp">examples/calculator/</a> ——
验收时用同一组用例(7+3、6÷0、4.5+0.5、连续按运算符)现场提问对照</dd>
</dl>
</div>
</section>