Day4 教学示例补三个:QDialog 综合 / QLineEdit 小眼睛 / 文件 IO(+顶层构建注册)

- qdialog_showcase:wiki「6 对话框 QDialog」6.2–6.5 综合演示。含两套实现:
  · Designer 表单版(dialog.{h,cpp,ui} + resources.qrc + source.gif,QMovie 播 GIF)
  · 纯代码版(qt_dialog_showcase.cpp,单文件,QWidget 布满按钮逐个演示 QDialog 行为)
- lineedit_eye_toggle:子类化 QLineEdit,paintEvent 自绘小眼睛、mouseEvent 命中切换
  echoMode,并与内置 clear button 动态避让(读 objectName=="clearButton" 子 widget 几何)。
  含独立子目录 CMakeLists.txt 供单独打开(顶层 add_subdirectory 不递归)。
- file_io_demo:QFile/QTextStream/QDataStream/QFileInfo/QDir/QTextCodec/QJson 五主题
  综合示例,每个按钮产出一个文件落到 demo_output/ 便于课堂手动查看。

构建注册:examples/CMakeLists.txt 用 add_teaching_example 注册前两个纯代码示例,
mandelbrot 多源文件单独 add_executable;calculator_mainwindow_qss 加 themes.qrc 与
AUTORCC;all_teaching_examples 依赖列表同步补齐。

附 lineedit_eye_toggle 设计文档(docs/superpowers/specs)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
张宗平
2026-07-09 16:51:09 +08:00
parent 993aa30a1c
commit 01b264fe97
16 changed files with 1694 additions and 3 deletions
+39 -3
View File
@@ -99,15 +99,47 @@ add_executable(qt_calculator_mainwindow_qss
calculator_mainwindow_qss/mainwindow.cpp
calculator_mainwindow_qss/calculatordesigner.cpp
calculator_mainwindow_qss/expressionevaluator.cpp
calculator_mainwindow_qss/widget.ui)
calculator_mainwindow_qss/widget.ui
calculator_mainwindow_qss/themes.qrc)
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)
AUTOMOC ON AUTOUIC ON AUTORCC 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)
# QDialog 教学综合示例(wiki「6 对话框 QDialog」pageId 183664881 的 6.26.5):
# QWidget 布满 pushbutton,每个按钮演示一种 QDialog 行为。纯代码(无 .ui),
# 单文件,走 add_teaching_example。
add_teaching_example(qt_dialog_showcase qdialog_showcase)
# QLineEdit 自绘小眼睛 / echo mode 切换(Day4 上午:组件绘制 + 事件捕捉 + clear button 避让):
# 子类化 QLineEditpaintEvent 自绘眼睛、mouseEvent 命中切换 echoMode,与内置 clear button
# 动态避让(读 objectName=="clearButton" 子 widget 几何)。子目录另有独立 CMakeLists.txt
# 供单独打开(不走这里:顶层 add_subdirectory 不递归)。
add_teaching_example(qt_lineedit_eye_toggle lineedit_eye_toggle)
# Day4 综合演示示例(事件机制 + QPainter 绘图 + 多线程):Mandelbrot 分形渲染器。
# 三段式对比(主线程卡死 / 后台单线程 / 后台多线程),滚轮缩放 + 拖拽平移 + 分块并行。
# 多源文件(无 .ui/.qrc),单独写 target;子目录另有独立 CMakeLists.txt 供单独打开
# (不走这里:顶层 add_subdirectory 不递归),与 lineedit_eye_toggle 同模式。
add_executable(qt_mandelbrot_renderer
mandelbrot_renderer/main.cpp
mandelbrot_renderer/mandelbrot_widget.cpp
mandelbrot_renderer/mandelbrot_strip_task.cpp)
target_include_directories(qt_mandelbrot_renderer PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_renderer)
set_target_properties(qt_mandelbrot_renderer PROPERTIES
CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF AUTOMOC ON)
target_link_libraries(qt_mandelbrot_renderer PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets)
target_compile_options(qt_mandelbrot_renderer PRIVATE -Wall -Wextra)
# Qt5 文件操作教学综合示例(QFile/QTextStream/QDataStream/QFileInfo/QDir/QTextCodec/QJson):
# 一个 QWidget 布满按钮,5 个主题(基础IO/编码/文本vs二进制/异常处理/QJson),每个按钮
# 产生一个文件落到 demo_output/(可执行文件同目录),方便课堂手动打开查看。纯代码单文件。
add_teaching_example(qt_file_io_demo file_io_demo)
add_custom_target(all_teaching_examples DEPENDS
qt_qss_styling
qt_model_view_basics
@@ -125,4 +157,8 @@ add_custom_target(all_teaching_examples DEPENDS
qt_student_manager
qt_mainwindow_showcase
qt_calculator_mainwindow
qt_calculator_mainwindow_qss)
qt_calculator_mainwindow_qss
qt_dialog_showcase
qt_lineedit_eye_toggle
qt_mandelbrot_renderer
qt_file_io_demo)