Skip to content

Latest commit

 

History

History
127 lines (77 loc) · 4.24 KB

File metadata and controls

127 lines (77 loc) · 4.24 KB

以下是 TD 4 – 使用现有类与图形界面 (IHM) 的中文翻译,保持原文结构与编号:


TP POO / 语言 C++ IF3 1/6 INSA GE

TD MOO : C++ / UML 第 4 次课 (共 6 次)

TD 4 – 使用现有类,图形界面 个人准备:掌握指针与继承,以及练习 2


练习 1:使用 Qt 实现图形界面

本练习的目标是为 TD0 的练习 1 实现一个图形用户界面 (GUI)。

1-a. 在 QtCreator 中创建一个 GUI 项目

  1. 启动 QtCreator,选择 “新建项目”,然后选择 “Qt Gui Application”(或在 QtCreator 4.0 中选择 “Qt Widgets Application”),点击 “选择”
  2. 在弹出的对话框中,输入项目名称和路径,点击 “下一步”
  3. 选择构建配置(一般可保留默认),点击 “下一步”
  4. 设置主窗口类名(可保留默认),点击 “下一步”
  5. 选择版本控制系统(本次 TD 不需要),点击 “完成”

创建完成后,QtCreator 会生成基础文件,界面大致如下: (此处略项目结构及示意图)


1-b. 向 UI 中添加 Label 和 PushButton

  1. 在左侧项目树点击 “Form”,双击 mainwindow.ui,切换到 Design 模式。

  2. 画面分为:

    • 窗口预览
    • 可用控件列表
    • 选中控件属性面板
    • 窗口控件层次结构
  3. 从控件列表中拖放一个 Label(标签) 和一个 PushButton(按钮) 到窗口预览中。

  4. 在属性面板中可修改控件的对象名称(Object Name)及其它属性。

  5. 确保窗口布局合理,如下图示例所示: (此处略示例图)


1-c. 编译与运行

  1. 编译并运行应用程序,确保没有错误。
  2. 点击按钮时目前尚未关联任何事件处理,因此不会有响应。下一步将实现点击事件。

1-d. 点击按钮显示 “Hello world”

  1. QtCreator 自动为每个拖放到窗口的控件,在 ui 对象中生成对应成员指针。

  2. 每个控件都有多种事件(点击、悬停、释放等),以 slot 的形式提供。

    • 右键点击 PushButton,选择 “Go to Slot”,然后选择 clicked()
    • 此时会在 MainWindow 类中添加一个名为 on_pushButton_clicked() 的槽函数。
  3. 在该函数中添加以下代码并运行程序:

    QString txt("Hello les GE");
    ui->label->setText(txt);

1-e. 添加运算功能(练习 1-b 的内容)

  1. 在主窗口中再添加两个 Double Spin Box(双精度旋转框)和一个 ComboBox(下拉框)。
  2. 实现 TD0 练习 1-b 中的四则运算(加、减、乘、除、取模)功能。
  3. 运算逻辑应写在单独的 .cpp 文件中,不要将计算代码写在 MainWindow 类里。
  4. 程序界面示例如下: (此处略示例图)

提示:按下 F1 可查看 Qt 各类及控件的帮助。

思考题

  • 在此项目中,您遇到了哪些编程难点?
  • 您认为如何提高开发效率?

练习 2:使用 std::vector

vector 类可动态、高效地管理任意类型的数组(如 doublecharComplexe 等),在创建时指定元素类型。完整文档见: http://www.cplusplus.com/reference/vector/vector/

2-a. 用 std::vector 完成 TD0 的 2-f 问题

  • 在提供的 TD_Ex2_main_TODO.cpp 中,使用 std::vector 对象实现相同的加法操作。

2-b. 理论题

  1. 为什么要对 vector 对象使用引用传递?
  2. 在引用传递时,const 关键字有什么作用?

2-c. 使用 std::sort 对向量进行升序排序

  • 调用 <algorithm> 中的 sort 函数,实现升序排列。

2-d. 使用 std::sort 对向量进行降序排序

  • 可通过传入自定义比较器或使用 greater<>() 实现降序排列。

2-e. 课外题:使用 std::valarray

vector 类不支持向量间的算术运算,valarray 类专为向量数学运算设计。 请使用 valarray 对象,重新完成 2-a、2-c 和 2-d 的功能。

文档参考: http://www.cplusplus.com/reference/vector/vector/


—— 结束 ——