Files
scuc-qt-course/docs/teaching/examples/calculator_mainwindow_qss/mainwindow.h
T
张宗平 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

57 lines
2.1 KiB
C++
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.
// ============================================================================
// mainwindow.h —— Day3 下午版:上午版 + QSS 界面美化(双主题)
//
// 相对 ../calculator_mainwindow/(上午版)的改动:
// ① 视图菜单新增「深色主题」可勾选项;
// ② applyStyle(bool dark) 按主题切换 setStyleSheet
// ③ runSelfTest() 增加「主题切换确实改变 styleSheet」的断言。
// 计算器面板、菜单/停靠窗/状态栏结构与上午版完全一致——QSS 与逻辑正交,
// 正是 Day3 下午「美化」环节要传达的核心点。
// ============================================================================
#ifndef CALCULATOR_MAINWINDOW_QSS_H
#define CALCULATOR_MAINWINDOW_QSS_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;
bool runSelfTest();
private slots:
void onAbout();
void onClearHistory();
void onToggleHistoryVisible(bool checked);
void onToggleTheme(bool dark); // 【下午版新增】深/浅主题切换
void onEvaluated(const QString& expr, const QString& result);
void onHistoryDoubleClicked(QListWidgetItem* item);
private:
void buildMenu();
void buildDock();
void buildStatusBar();
void refreshStatus(const QString& msg);
void applyStyle(bool dark); // 【下午版新增】
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_actToggleTheme = nullptr; // 【下午版新增】
QAction* m_actAbout = nullptr;
bool m_dark = false; // 【下午版新增】当前是否深色主题
};
#endif // CALCULATOR_MAINWINDOW_QSS_H