Files
scuc-qt-course/docs/teaching/examples/CMakeLists.txt
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

129 lines
6.8 KiB
CMake
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.
# 手工维护 —— 不是 tools/gen_part3.py 的生成产物,重新生成 p01/p03 不会影响这里。
#
# 教学补充示例:方案书「C++方向」课程要求、但仓库 p03/(wiki 抓取内容)未覆盖
# 的技术点,每个子目录一个最小可运行 Qt 程序 + 配套 README.md 教学文档。
# 不计入 README.md/CLAUDE.md 里「144+29=173 个目标」的生成器目标计数。
function(add_teaching_example name dir)
add_executable(${name} ${dir}/${name}.cpp)
set_target_properties(${name} PROPERTIES
CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF AUTOMOC ON)
target_link_libraries(${name} PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets)
target_compile_options(${name} PRIVATE -Wall -Wextra)
endfunction()
add_teaching_example(qt_qss_styling qss_styling)
add_teaching_example(qt_model_view_basics model_view)
add_teaching_example(qt_json_parse_write json_io)
add_teaching_example(qt_thread_worker qthread_worker)
add_teaching_example(qt_property_animation property_animation)
add_teaching_example(qt_state_machine state_machine)
# 坑点最小复现示例(OUTLINE_4DAY.md §9.2):默认跑「正确写法」离屏可验证退出码 0,
# 错误写法一律用命令行开关现场触发(--crash / --dangle),不影响自动化验证。
add_teaching_example(qt_pitfall_stack_widget pitfall_stack_widget)
add_teaching_example(qt_pitfall_lambda_capture pitfall_lambda_capture)
add_teaching_example(qt_pitfall_double_connect pitfall_double_connect)
add_teaching_example(qt_table_widget_basics table_widget)
# Day2 下午案例参考实现(OUTLINE_4DAY.md Day2 下午「简易计算器」)
add_teaching_example(qt_calculator calculator)
# Day2 案例的 Qt Designer(.ui) 对照版:界面用表单设计、业务逻辑与 qt_calculator
# 一致。需要 AUTOUICadd_teaching_example 只开 AUTOMOC),单独写 target。
add_executable(qt_calculator_designer
calculator_designer/qt_calculator_designer.cpp
calculator_designer/calculator_designer.ui)
set_target_properties(qt_calculator_designer PROPERTIES
CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF
AUTOMOC ON AUTOUIC ON)
target_link_libraries(qt_calculator_designer PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets)
target_compile_options(qt_calculator_designer PRIVATE -Wall -Wextra)
# Day2 增强版计算器(calculator_designer_ext):在 Designer 版基础上把「立即计算」
# 升级为「表达式求值」——独立 ExpressionEvaluator 用递归下降解析器实现运算符优先级
# 与括号(含嵌套、未闭合自动补全)。多源文件 + .ui 表单,单独写 target。
# 注意:子目录里那个 Qt Creator 导出的 CMakeLists.txt 不参与仓库构建(C++11 /
# 目标名 Calculator / ANDROID 分支均不符仓库 C++17 规范),构建一律走本 target。
add_executable(qt_calculator_designer_ext
calculator_designer_ext/main.cpp
calculator_designer_ext/calculatordesigner.cpp
calculator_designer_ext/expressionevaluator.cpp
calculator_designer_ext/widget.ui)
target_include_directories(qt_calculator_designer_ext PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/calculator_designer_ext)
set_target_properties(qt_calculator_designer_ext PROPERTIES
CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF
AUTOMOC ON AUTOUIC ON)
target_link_libraries(qt_calculator_designer_ext PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets)
target_compile_options(qt_calculator_designer_ext PRIVATE -Wall -Wextra)
# Day5 综合案例参考实现(OUTLINE_4DAY.md §3 / §9.3
add_teaching_example(qt_student_manager student_manager)
# QMainWindow 教学综合示例(wiki「5 QMainWindow」pageId 58954529 的 5.15.6 全组件):
# form designer(.ui) 定义主窗体结构、.qrc 资源文件提供应用图标。单独写 target
# (标准 add_teaching_example 只开 AUTOMOC,本例还需 AUTOUIC+AUTORCC)。
add_executable(qt_mainwindow_showcase
mainwindow_showcase/main.cpp
mainwindow_showcase/mainwindow_showcase.cpp
mainwindow_showcase/mainwindow_showcase.h
mainwindow_showcase/mainwindow.ui
mainwindow_showcase/mainwindow.qrc)
set_target_properties(qt_mainwindow_showcase PROPERTIES
CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF
AUTOMOC ON AUTOUIC ON AUTORCC ON)
target_link_libraries(qt_mainwindow_showcase PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets)
target_compile_options(qt_mainwindow_showcase PRIVATE -Wall -Wextra)
# Day3 上午版参考实现:把 Day2 增强版计算器装进 QMainWindow(菜单/状态栏/历史停靠窗)。
# 复用 Day2 的 calculatordesigner + expressionevaluator + widget.ui(自包含复制),
# 新增 mainwindow.{h,cpp} 外壳 + 含 runSelfTest 的 main.cpp。无 QSSQSS 在下午版)。
add_executable(qt_calculator_mainwindow
calculator_mainwindow/main.cpp
calculator_mainwindow/mainwindow.cpp
calculator_mainwindow/calculatordesigner.cpp
calculator_mainwindow/expressionevaluator.cpp
calculator_mainwindow/widget.ui)
target_include_directories(qt_calculator_mainwindow PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/calculator_mainwindow)
set_target_properties(qt_calculator_mainwindow PROPERTIES
CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF
AUTOMOC ON AUTOUIC ON)
target_link_libraries(qt_calculator_mainwindow PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets)
target_compile_options(qt_calculator_mainwindow PRIVATE -Wall -Wextra)
# Day3 下午版参考实现:上午版 + QSS 双主题美化。复用上午版同款 5 文件(自包含复制),
# 仅 mainwindow.{h,cpp} 加双主题 QSS + 视图菜单「深色主题」、main.cpp 自测加主题断言。
add_executable(qt_calculator_mainwindow_qss
calculator_mainwindow_qss/main.cpp
calculator_mainwindow_qss/mainwindow.cpp
calculator_mainwindow_qss/calculatordesigner.cpp
calculator_mainwindow_qss/expressionevaluator.cpp
calculator_mainwindow_qss/widget.ui)
target_include_directories(qt_calculator_mainwindow_qss PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/calculator_mainwindow_qss)
set_target_properties(qt_calculator_mainwindow_qss PROPERTIES
CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF
AUTOMOC ON AUTOUIC ON)
target_link_libraries(qt_calculator_mainwindow_qss PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets)
target_compile_options(qt_calculator_mainwindow_qss PRIVATE -Wall -Wextra)
add_custom_target(all_teaching_examples DEPENDS
qt_qss_styling
qt_model_view_basics
qt_json_parse_write
qt_thread_worker
qt_property_animation
qt_state_machine
qt_pitfall_stack_widget
qt_pitfall_lambda_capture
qt_pitfall_double_connect
qt_table_widget_basics
qt_calculator
qt_calculator_designer
qt_calculator_designer_ext
qt_student_manager
qt_mainwindow_showcase
qt_calculator_mainwindow
qt_calculator_mainwindow_qss)