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:
@@ -0,0 +1,59 @@
|
||||
// ============================================================================
|
||||
// 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
|
||||
Reference in New Issue
Block a user