Files
张宗平 05a685c952 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>
2026-07-07 22:59:05 +08:00

60 lines
2.5 KiB
C++
Raw Permalink 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.
// ============================================================================
// mainwindow.h —— Day3 上午版:把增强版计算器装进 QMainWindow
//
// 对应教案 OUTLINE_4DAY.md Day3 上午「QMainWindow / 对话框 QDialog」。
// 本类只做「外壳」:菜单栏 / 状态栏 / 历史停靠窗 + 把 CalculatorDesigner
// 作为中心部件 setCentralWidget。计算器面板本身的输入/求值逻辑一字未改
// (见 calculatordesigner.cpp)——这正是「界面外壳升级、核心部件不动」
// 的关注点分离演示。
//
// 与 mainwindow_showcase 的风格对照(同为 Day3 上午教学载体):
// - mainwindow_showcase.ui 表单定义主窗体结构 + on_<obj>_<sig> 自动连接
// - 本例:纯代码建菜单/停靠窗 + 显式 connect()
// 两种风格并列,前者突出「Designer 快速搭骨架」,后者突出「QAction 必须
// connect 才生效」(Day3 上午坑卡:菜单显示正常点了没反应)。
// ============================================================================
#ifndef CALCULATOR_MAINWINDOW_H
#define CALCULATOR_MAINWINDOW_H
#include <QMainWindow>
class CalculatorDesigner;
class QListWidget;
class QListWidgetItem;
class QDockWidget;
class QAction;
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow() override;
// 离屏自测:复用 Day2 的 9 组计算用例 + Day3 新增(历史追加 / 双击回填 /
// 关于对话框触发)。返回全过为 true,供 main.cpp 决定退出码。
bool runSelfTest();
private slots:
void onAbout(); // 帮助→关于:QMessageBox::about
void onClearHistory(); // 编辑→清空历史
void onToggleHistoryVisible(bool checked); // 视图→显示历史
void onEvaluated(const QString& expr, const QString& result); // 计算器求值→追加历史
void onHistoryDoubleClicked(QListWidgetItem* item); // 双击历史→回填表达式
private:
void buildMenu();
void buildDock();
void buildStatusBar();
void refreshStatus(const QString& msg);
CalculatorDesigner* m_calc = nullptr;
QListWidget* m_history = nullptr;
QDockWidget* m_dock = nullptr;
QAction* m_actQuit = nullptr;
QAction* m_actClearHistory = nullptr;
QAction* m_actToggleHistory = nullptr;
QAction* m_actAbout = nullptr;
};
#endif // CALCULATOR_MAINWINDOW_H