Day3 教学示例:增强版计算器接入 + QMainWindow/QSS 两版参考实现

- calculator_designer_ext(Day2 增强版:表达式求值 + 括号,递归下降解析器)接入 cmake
- calculator_mainwindow(Day3 上午):增强版计算器装进 QMainWindow,
  菜单/状态栏/历史停靠窗,纯代码 + 显式 connect,与 mainwindow_showcase 形成坑卡对照
- calculator_mainwindow_qss(Day3 下午):上午版 + QSS 双主题美化(按键分色/伪状态/深浅切换)
- 验证 mainwindow_showcase(QMainWindow 六大组件综合演示,.ui + .qrc)
- OUTLINE_4DAY.md / ASSIGNMENTS.md Day3 衔接增强版起点 + 参考实现指引
- 补提交 Day2 calculator/ 与 calculator_designer/ 参考实现(CMakeLists 已引用)
- 全量构建 28/28,4 目标离屏自测退出码 0

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
张宗平
2026-07-07 22:59:05 +08:00
parent ea6f12e7ac
commit 05a685c952
45 changed files with 4599 additions and 6 deletions
@@ -0,0 +1,164 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CalculatorForm</class>
<widget class="QWidget" name="CalculatorForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>358</width>
<height>320</height>
</rect>
</property>
<property name="windowTitle">
<string>简易计算器(Designer 版)</string>
</property>
<layout class="QVBoxLayout" name="rootLayout">
<item>
<widget class="QLineEdit" name="display">
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="keypadLayout">
<item row="0" column="0">
<widget class="QPushButton" name="btn7">
<property name="text">
<string>7</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="btn8">
<property name="text">
<string>8</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="btn9">
<property name="text">
<string>9</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="btnDiv">
<property name="text">
<string>÷</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="btn4">
<property name="text">
<string>4</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="btn5">
<property name="text">
<string>5</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="btn6">
<property name="text">
<string>6</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="btnMul">
<property name="text">
<string>×</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="btn1">
<property name="text">
<string>1</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btn2">
<property name="text">
<string>2</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="btn3">
<property name="text">
<string>3</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="btnMinus">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="btn0">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="btnDot">
<property name="text">
<string>.</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="btnEquals">
<property name="text">
<string>=</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QPushButton" name="btnPlus">
<property name="text">
<string>+</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QPushButton" name="btnClear">
<property name="text">
<string>C</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="btnBackspace">
<property name="text">
<string>⌫</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>