Compare commits

..

2 Commits
hqq ... main

Author SHA1 Message Date
zyh fbdbbb9cd1 取消日志输出
3 months ago
zyh a7974c5213 最终版
3 months ago

@ -1,2 +1,258 @@
# eaxmSystem
# 数学学习考试系统
## 项目简介
一个基于C++和Qt框架开发的跨平台数学学习考试系统支持小学、初中、高中三个学段的数学题目生成、在线答题、成绩统计等功能。系统采用前后端分离架构。
## 功能特性
### 🔐 用户管理
- 用户注册(邮箱验证码验证)
- 用户登录/登出
- 密码修改
- 个人信息查看
### 📚 题目生成
- **小学**:基础四则运算,确保结果非负
- **初中**:包含平方、开根号运算
- **高中**:包含三角函数运算
- 智能查重,避免重复题目
- 历史题目保存和加载
### 🎯 考试功能
- 自定义题目数量5-50题
- 实时答题进度显示
- 上一题/下一题导航
- 自动批改和成绩统计
- 错题回顾
### 💾 数据管理
- 用户数据持久化存储
- 题目历史记录保存
- 自动备份和恢复
## 技术栈
### 前端
- **框架**Qt 5/6
- **语言**C++
- **UI组件**QWidget、QStackedWidget、QPushButton等
### 后端
- **核心架构**:模块化设计,工厂模式
- **数学计算**:表达式解析和求值
- **文件管理**CSV格式用户数据TXT格式题目存储
- **邮件服务**libcurl + SMTP协议
### 开发工具
- **编译器**支持C++11的编译器gcc/clang/MSVC
- **构建工具**CMake
- **版本控制**Git
## 项目结构
```
MathExamSystem/
├── frontend/ # 前端界面
│ ├── base_widget.h/.cc # 基础窗口组件
│ ├── login_widget.h/.cc # 登录注册界面
│ ├── selection_widget.h/.cc # 难度选择界面
│ ├── question_widget.h/.cc # 答题界面
│ ├── result_widget.h/.cc # 成绩显示界面
│ ├── main_window.h/.cc # 主窗口管理
│ └── change_password_dialog.h/.cc # 修改密码对话框
├── backend/ # 后端核心
│ ├── exam_system/ # 考试系统核心
│ │ ├── exam_system.h/.cc # 系统控制层
│ │ ├── problem_generator.h/.cc # 题目生成器
│ │ ├── duplicate_checker.h/.cc # 重复检查器
│ │ └── input_validator.h/.cc # 输入验证器
│ ├── file_manager/ # 文件管理
│ │ └── file_manager.h/.cc
│ └── logger/ # 日志系统
│ └── logger.h/.cc
├── shared/ # 共享接口
│ └── backend_interface.h/.cc # 前后端通信接口
├── main.cc # 程序入口
└── CMakeLists.txt # 构建配置
```
## 环境要求
### 系统要求
- **Windows**: Windows 10/11, Visual Studio 2019+
- **Linux**: Ubuntu 18.04+, CentOS 7+
- **macOS**: macOS 10.14+
### 依赖库
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install build-essential cmake qt6-base-dev libcurl4-openssl-dev
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install cmake qt6-qtbase-devel libcurl-devel
# macOS (Homebrew)
brew install cmake qt6 curl
```
## 编译和运行
### 1. 克隆项目
```bash
git clone <repository-url>
cd MathExamSystem
```
### 2. 创建构建目录
```bash
mkdir build
cd build
```
### 3. 配置项目
```bash
cmake ..
```
### 4. 编译项目
```bash
# Linux/macOS
make -j4
# Windows (Visual Studio)
cmake --build . --config Release
```
### 5. 运行程序
```bash
# Linux/macOS
./MathExamSystem
# Windows
./Release/MathExamSystem.exe
```
## 使用指南
### 首次使用
1. **启动程序**:运行编译后的可执行文件
2. **注册账号**
- 点击"注册新账号"
- 输入邮箱地址,点击"发送验证码"
- 检查邮箱获取验证码并填写
- 设置用户名和密码6-10位包含大小写字母和数字
- 点击"注册"
3. **登录系统**
- 输入用户名和密码
- 点击"登录"
### 开始学习
1. **选择难度**
- 小学:基础四则运算
- 初中:包含平方、开根号
- 高中:包含三角函数
2. **设置题目数量**通过数字选择框设置5-50题
3. **开始测试**:点击"开始测试"进入答题界面
### 答题流程
1. **阅读题目**:仔细阅读题目内容
2. **选择答案**从A、B、C、D四个选项中选择
3. **导航题目**
- 使用"上一题"、"下一题"按钮切换
- 最后一题显示"提交试卷"按钮
4. **提交答案**:完成所有题目后提交
### 查看结果
- 系统自动批改并显示得分
- 查看正确题目数量和总题目数
- 可选择"继续做题"或"退出"
## 配置说明
### 邮件服务配置
如需使用邮箱验证功能,请编辑 `backend_interface.cc` 中的邮箱配置:
```cpp
email_config_.smtp_server = "smtp.163.com";
email_config_.smtp_port = 587;
email_config_.username = "your_email@163.com";
email_config_.password = "your_authorization_code";
```
**注意**
- 使用163邮箱需要开启SMTP服务并获取授权码
- 授权码不是登录密码
- 其他邮箱服务商配置类似
### 数据文件说明
- `users.csv`:用户数据文件(自动生成)
- `用户名/` 目录:用户题目历史记录
- 日志输出到控制台
## 常见问题
### Q: 编译时找不到Qt库
A: 确保已安装Qt开发包并设置正确的CMAKE_PREFIX_PATH
```bash
cmake -DCMAKE_PREFIX_PATH=/path/to/qt ..
```
### Q: 邮件发送失败
A:
1. 检查邮箱配置是否正确
2. 确认网络连接正常
3. 检查防火墙设置
### Q: 题目生成失败
A:
1. 检查是否有写入权限
2. 确认磁盘空间充足
### Q: 程序崩溃
A:
1. 检查依赖库版本兼容性
2. 查看控制台输出的错误信息
## 开发指南
### 添加新的题目类型
1. 在 `problem_generator.h` 中定义新的生成器类
2. 实现 `GenerateProblem()` 方法
3. 在工厂类中注册新的生成器
### 扩展用户界面
1. 继承 `BaseWidget` 创建新的界面组件
2. 在 `main_window.h` 中声明新的界面
3. 在 `main_window.cc` 中管理界面切换
## 类说明请看doc/ExamSystem.md

@ -0,0 +1,854 @@
# 数学学习考试系统 - 项目说明
## 项目简介
一个基于C++和Qt框架开发的跨平台数学学习考试系统支持小学、初中、高中三个学段的数学题目生成、在线答题、成绩统计等功能。系统采用前后端分离架构。
## 功能特性
### 🔐 用户管理
- 用户注册(邮箱验证码验证)
- 用户登录/登出
- 密码修改
- 个人信息查看
### 📚 题目生成
- **小学**:基础四则运算,确保结果非负
- **初中**:包含平方、开根号运算
- **高中**:包含三角函数运算
- 智能查重,避免重复题目
- 历史题目保存和加载
### 🎯 考试功能
- 自定义题目数量5-50题
- 实时答题进度显示
- 上一题/下一题导航
- 自动批改和成绩统计
- 错题回顾
### 💾 数据管理
- 用户数据持久化存储
- 题目历史记录保存
- 自动备份和恢复
## 技术栈
### 前端
- **框架**Qt 5/6
- **语言**C++
- **UI组件**QWidget、QStackedWidget、QPushButton等
### 后端
- **核心架构**:模块化设计,工厂模式
- **数学计算**:表达式解析和求值
- **文件管理**CSV格式用户数据TXT格式题目存储
- **邮件服务**libcurl + SMTP协议
### 开发工具
- **编译器**支持C++11的编译器gcc/clang/MSVC
- **构建工具**CMake
- **版本控制**Git
## 项目结构
```
MathExamSystem/
├── frontend/ # 前端界面
│ ├── base_widget.h/.cc # 基础窗口组件
│ ├── login_widget.h/.cc # 登录注册界面
│ ├── selection_widget.h/.cc # 难度选择界面
│ ├── question_widget.h/.cc # 答题界面
│ ├── result_widget.h/.cc # 成绩显示界面
│ ├── main_window.h/.cc # 主窗口管理
│ └── change_password_dialog.h/.cc # 修改密码对话框
├── backend/ # 后端核心
│ ├── exam_system/ # 考试系统核心
│ │ ├── exam_system.h/.cc # 系统控制层
│ │ ├── problem_generator.h/.cc # 题目生成器
│ │ ├── duplicate_checker.h/.cc # 重复检查器
│ │ └── input_validator.h/.cc # 输入验证器
│ ├── file_manager/ # 文件管理
│ │ └── file_manager.h/.cc
│ └── logger/ # 日志系统
│ └── logger.h/.cc
├── shared/ # 共享接口
│ └── backend_interface.h/.cc # 前后端通信接口
├── main.cc # 程序入口
└── CMakeLists.txt # 构建配置
```
## 环境要求
### 系统要求
- **Windows**: Windows 10/11, Visual Studio 2019+
- **Linux**: Ubuntu 18.04+, CentOS 7+
- **macOS**: macOS 10.14+
### 依赖库
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install build-essential cmake qt6-base-dev libcurl4-openssl-dev
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install cmake qt6-qtbase-devel libcurl-devel
# macOS (Homebrew)
brew install cmake qt6 curl
```
## 编译和运行
### 1. 克隆项目
```bash
git clone <repository-url>
cd MathExamSystem
```
### 2. 创建构建目录
```bash
mkdir build
cd build
```
### 3. 配置项目
```bash
cmake ..
```
### 4. 编译项目
```bash
# Linux/macOS
make -j4
# Windows (Visual Studio)
cmake --build . --config Release
```
### 5. 运行程序
```bash
# Linux/macOS
./MathExamSystem
# Windows
./Release/MathExamSystem.exe
```
## 使用指南
### 首次使用
1. **启动程序**:运行编译后的可执行文件
2. **注册账号**
- 点击"注册新账号"
- 输入邮箱地址,点击"发送验证码"
- 检查邮箱获取验证码并填写
- 设置用户名和密码6-10位包含大小写字母和数字
- 点击"注册"
3. **登录系统**
- 输入用户名和密码
- 点击"登录"
### 开始学习
1. **选择难度**
- 小学:基础四则运算
- 初中:包含平方、开根号
- 高中:包含三角函数
2. **设置题目数量**通过数字选择框设置5-50题
3. **开始测试**:点击"开始测试"进入答题界面
### 答题流程
1. **阅读题目**:仔细阅读题目内容
2. **选择答案**从A、B、C、D四个选项中选择
3. **导航题目**
- 使用"上一题"、"下一题"按钮切换
- 最后一题显示"提交试卷"按钮
4. **提交答案**:完成所有题目后提交
### 查看结果
- 系统自动批改并显示得分
- 查看正确题目数量和总题目数
- 可选择"继续做题"或"退出"
## 配置说明
### 邮件服务配置
如需使用邮箱验证功能,请编辑 `backend_interface.cc` 中的邮箱配置:
```cpp
email_config_.smtp_server = "smtp.163.com";
email_config_.smtp_port = 587;
email_config_.username = "your_email@163.com";
email_config_.password = "your_authorization_code";
```
**注意**
- 使用163邮箱需要开启SMTP服务并获取授权码
- 授权码不是登录密码
- 其他邮箱服务商配置类似
### 数据文件说明
- `users.csv`:用户数据文件(自动生成)
- `用户名/` 目录:用户题目历史记录
- 日志输出到控制台
## 常见问题
### Q: 编译时找不到Qt库
A: 确保已安装Qt开发包并设置正确的CMAKE_PREFIX_PATH
```bash
cmake -DCMAKE_PREFIX_PATH=/path/to/qt ..
```
### Q: 邮件发送失败
A:
1. 检查邮箱配置是否正确
2. 确认网络连接正常
3. 检查防火墙设置
### Q: 题目生成失败
A:
1. 检查是否有写入权限
2. 确认磁盘空间充足
### Q: 程序崩溃
A:
1. 检查依赖库版本兼容性
2. 查看控制台输出的错误信息
## 开发指南
### 添加新的题目类型
1. 在 `problem_generator.h` 中定义新的生成器类
2. 实现 `GenerateProblem()` 方法
3. 在工厂类中注册新的生成器
### 扩展用户界面
1. 继承 `BaseWidget` 创建新的界面组件
2. 在 `main_window.h` 中声明新的界面
3. 在 `main_window.cc` 中管理界面切换
# 数学学习考试系统 - 系统框架和设计说明
## 系统架构概览
```mermaid
graph TB
subgraph Frontend[<b>前端界面层</b>]
A1[LoginWidget]
A2[SelectionWidget]
A3[QuestionWidget]
A4[ResultWidget]
end
subgraph Interface[<b>接口适配层</b>]
B1[BackendInterface]
B2[BackendImpl]
end
subgraph Business[<b>业务逻辑层</b>]
C1[ExamSystem]
end
subgraph Services[<b>服务组件层</b>]
D1[ProblemGenerator]
D2[UserManager]
D3[FileManager]
D4[DuplicateChecker]
end
A1 & A2 & A3 & A4 --> B1
B1 --> B2
B2 --> C1
C1 --> D1 & D2 & D3 & D4
classDef frontend fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef interface fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef business fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
classDef services fill:#fff3e0,stroke:#e65100,stroke-width:2px
class A1,A2,A3,A4 frontend
class B1,B2 interface
class C1 business
class D1,D2,D3,D4 services
```
## 详细架构设计
### 1. 前端界面层 (Frontend Layer)
#### 1.1 界面组件架构
```
MainWindow (主窗口容器)
├── QStackedWidget (页面堆栈管理器)
│ ├── LoginWidget (登录注册界面)
│ ├── SelectionWidget (难度选择界面)
│ ├── QuestionWidget (答题界面)
│ └── ResultWidget (成绩显示界面)
└── ChangePasswordDialog (修改密码对话框)
```
#### 1.2 界面状态流转
```
登录界面 → 选择界面 → 答题界面 → 结果界面
↑ │ │ │
└─────────┴──────────┴─────────┘
(重新开始/退出登录)
```
#### 1.3 前端设计模式
- **组合模式**: BaseWidget作为所有界面的基类
- **观察者模式**: Qt信号槽机制实现组件间通信
- **状态模式**: 通过QStackedWidget管理不同界面状态
### 2. 接口适配层 (Interface Layer)
#### 2.1 接口设计原则
```cpp
// 抽象接口 - 面向抽象编程
class BackendInterface {
public:
virtual bool UserLogin(...) = 0;
virtual bool UserRegister(...) = 0;
virtual std::vector<QuestionInfo> GenerateQuestions(...) = 0;
// ... 其他接口方法
};
// 具体实现 - 委托给业务层
class BackendImpl : public BackendInterface {
private:
std::unique_ptr<ExamSystem> exam_system_;
// 实现所有接口方法委托给exam_system_
};
```
#### 2.2 数据转换职责
- 将前端数据结构转换为后端可处理格式
- 将后端返回数据转换为前端显示格式
- 处理验证码管理和邮件发送
### 3. 业务逻辑层 (Business Layer)
#### 3.1 ExamSystem 核心控制器
```cpp
class ExamSystem {
// 用户会话管理
std::map<std::string, UserSession> user_sessions_;
// 业务组件
DuplicateChecker duplicate_checker_;
SystemConfig config_;
// 核心业务方法
LoginResponse Login(const LoginRequest& request);
GenerateResponse GenerateProblems(const GenerateRequest& request);
// ... 其他业务方法
};
```
#### 3.2 用户会话管理
```cpp
struct UserSession {
std::unique_ptr<ProblemGenerator> generator; // 题目生成器
std::string current_type; // 当前类型
bool history_loaded = false; // 历史加载状态
};
```
### 4. 服务组件层 (Service Components)
#### 4.1 题目生成子系统
```
ProblemGenerator (抽象基类)
├── PrimarySchoolGenerator (小学生成器)
├── MiddleSchoolGenerator (初中生成器)
└── HighSchoolGenerator (高中生成器)
ProblemGeneratorFactory (工厂类)
```
**题目生成策略**:
- **小学**: 确保运算结果不为负数
- **初中**: 包含平方(²)和开根号(√)运算
- **高中**: 包含三角函数(sin/cos/tan)运算
#### 4.2 重复检查子系统
```cpp
class DuplicateChecker {
private:
std::map<std::string, std::vector<std::string>> user_problems_;
std::set<std::string> loaded_users_;
public:
bool CheckDuplicate(const std::string& username, const std::string& problem);
void LoadUserHistory(const std::string& username);
};
```
#### 4.3 文件管理子系统
```cpp
class FileManager {
public:
// 用户目录管理
static bool CreateUserDirectory(const std::string& username);
// 题目持久化
static bool SaveProblemsToFile(const std::string& username,
const std::vector<std::string>& problems);
// 历史记录加载
static std::vector<std::string> LoadUserHistoryProblems(const std::string& username);
};
```
#### 4.4 邮件服务子系统
```cpp
class EmailService {
private:
EmailConfig config_;
public:
bool SendVerificationCode(const std::string& email, const std::string& code);
bool SendEmailViaCurl(const std::string& recipient,
const std::string& subject,
const std::string& body);
};
```
## 核心设计模式详解
### 1. 分层架构模式 (Layered Architecture)
```
表现层 (Presentation) → 应用层 (Application) → 领域层 (Domain) → 基础设施层 (Infrastructure)
前端界面 接口适配 业务逻辑 文件/邮件/日志
```
### 2. 工厂模式 (Factory Pattern)
```cpp
// 题目生成器工厂
std::unique_ptr<ProblemGenerator> ProblemGeneratorFactory::CreateGenerator(
const std::string& type) {
if (type == "小学") return std::make_unique<PrimarySchoolGenerator>();
if (type == "初中") return std::make_unique<MiddleSchoolGenerator>();
if (type == "高中") return std::make_unique<HighSchoolGenerator>();
return nullptr;
}
```
### 3. 策略模式 (Strategy Pattern)
```cpp
// 不同难度的题目生成策略
class ProblemGenerator {
public:
virtual std::string GenerateProblem() = 0; // 策略接口
};
class PrimarySchoolGenerator : public ProblemGenerator {
std::string GenerateProblem() override {
// 小学题目生成策略
}
};
```
### 4. 门面模式 (Facade Pattern)
```cpp
// BackendImpl作为门面简化复杂后端系统的使用
class BackendImpl : public BackendInterface {
public:
bool UserLogin(...) override {
// 内部协调多个子系统完成登录
return exam_system_->Login(request).success;
}
};
```
## 数据流设计
### 1. 用户登录数据流
```
1. 用户输入 → LoginWidget → BackendInterface → BackendImpl
2. BackendImpl → ExamSystem → 用户验证 → 创建会话
3. 返回结果 → 前端界面更新
```
### 2. 题目生成数据流
```
1. 用户选择 → SelectionWidget → GenerateQuestions请求
2. BackendImpl → ExamSystem → ProblemGeneratorFactory
3. 生成题目 → DuplicateChecker查重 → 保存到文件
4. 返回题目列表 → 前端显示
```
### 3. 答案提交数据流
```
1. 用户答案 → QuestionWidget → SubmitAnswers请求
2. BackendImpl → 答案验证 → 成绩计算
3. 返回TestResult → ResultWidget显示
```
## 持久化设计
### 1. 用户数据存储
```csv
# users.csv 格式
username,password,user_type,email
zhangsan1,123,小学,zhangsan1@example.com
lisi1,123,初中,lisi1@example.com
```
### 2. 题目历史存储
```
用户名目录/
├── 2024-01-15-10-30-25.txt
├── 2024-01-16-14-20-10.txt
└── ...
```
### 3. 会话状态管理
- 内存中维护用户会话
- 验证码有时效性(5分钟)
- 题目缓存提高性能
# 数学学习考试系统 - 类说明
## 前端界面类
### BaseWidget (基础窗口组件)
**文件**: `base_widget.h`, `base_widget.cc`
- **职责**: 所有前端窗口组件的基类,提供公共功能和成员变量
- **继承关系**: 继承自 `QWidget`
- **主要成员**:
- `backend`: 指向后端接口的指针
- **主要方法**:
- `BaseWidget()`: 构造函数,初始化后端接口
- `showMessage()`: 显示消息对话框的公共方法
- `setupUI()`: 纯虚方法,子类必须实现的界面初始化方法
### LoginWidget (登录注册界面)
**文件**: `login_widget.h`, `login_widget.cc`
- **职责**: 处理用户登录和注册功能
- **继承关系**: 继承自 `BaseWidget`
- **主要成员**:
- `loginPage`, `registerPage`: 登录和注册页面组件
- `stackedWidget`: 页面堆栈,用于切换登录/注册页面
- 各种输入框和按钮组件
- **主要方法**:
- `onLoginClicked()`: 处理登录按钮点击
- `onRegisterClicked()`: 处理注册按钮点击
- `onSendCodeClicked()`: 发送验证码
- `validatePassword()`: 验证密码格式
### SelectionWidget (难度选择界面)
**文件**: `selection_widget.h`, `selection_widget.cc`
- **职责**: 提供难度选择和系统菜单功能
- **继承关系**: 继承自 `BaseWidget`
- **主要成员**:
- `primaryBtn`, `juniorBtn`, `seniorBtn`: 难度选择按钮
- `countSpinBox`: 题目数量选择框
- `menuBar`: 菜单栏,包含用户和系统菜单
- **主要方法**:
- `onPrimaryClicked()`: 选择小学难度
- `onJuniorClicked()`: 选择初中难度
- `onSeniorClicked()`: 选择高中难度
- `onStartClicked()`: 开始测试
- `onChangePasswordClicked()`: 修改密码
### QuestionWidget (答题界面)
**文件**: `question_widget.h`, `question_widget.cc`
- **职责**: 显示题目和选项,处理用户答题过程
- **继承关系**: 继承自 `BaseWidget`
- **主要成员**:
- `questionLabel`: 题目显示标签
- `optionButtons[4]`: 选项单选按钮
- `progressLabel`: 进度显示标签
- `questions_`: 题目列表
- `user_answers_`: 用户答案列表
- **主要方法**:
- `startTest()`: 开始测试
- `showQuestion()`: 显示指定题目
- `onNextClicked()`: 下一题
- `onPrevClicked()`: 上一题
- `onSubmitClicked()`: 提交答案
### ResultWidget (成绩显示界面)
**文件**: `result_widget.h`, `result_widget.cc`
- **职责**: 显示测试结果和提供后续操作
- **继承关系**: 继承自 `BaseWidget`
- **主要成员**:
- `scoreLabel`: 分数显示标签
- `detailLabel`: 详细信息标签
- `restartBtn`, `exitBtn`: 操作按钮
- **主要方法**:
- `showResult()`: 显示测试结果
- 信号: `restartTest()`, `exitTest()`
### MainWindow (主窗口)
**文件**: `main_window.h`, `main_window.cc`
- **职责**: 管理所有界面的切换和协调
- **继承关系**: 继承自 `QMainWindow`
- **主要成员**:
- `stackedWidget`: 堆栈窗口,管理所有界面
- 各个界面组件的指针
- **主要方法**:
- `showSelection()`: 显示选择界面
- `showQuestions()`: 显示答题界面
- `showResult()`: 显示结果界面
- `logout()`: 用户登出
### ChangePasswordDialog (修改密码对话框)
**文件**: `change_password_dialog.h`, `change_password_dialog.cc`
- **职责**: 处理用户修改密码功能
- **继承关系**: 继承自 `QDialog`
- **主要方法**:
- `onChangePasswordClicked()`: 确认修改密码
- `validatePassword()`: 实时验证密码格式
---
## 后端核心类
### ExamSystem (考试系统核心)
**文件**: `exam_system.h`, `exam_system.cc`
- **职责**: 系统的核心控制层,协调所有业务逻辑
- **主要成员**:
- `config_`: 系统配置信息
- `user_sessions_`: 用户会话映射表
- `duplicate_checker_`: 重复检查器实例
- **主要方法**:
- `Login()`: 用户登录
- `Logout()`: 用户登出
- `GenerateProblems()`: 生成题目
- `ChangePassword()`: 修改密码
- `CalculateAnswer()`: 计算表达式答案
### ProblemGenerator (题目生成器基类)
**文件**: `problem_generator.h`, `problem_generator.cc`
- **职责**: 定义题目生成器的统一接口
- **主要方法**:
- `GenerateProblem()`: 生成单个题目(纯虚)
- `GetCurrentType()`: 获取生成器类型(纯虚)
- `ValidateProblem()`: 验证题目有效性(纯虚)
### PrimarySchoolGenerator (小学题目生成器)
**职责**: 生成小学难度的数学题目
- **特点**: 基础四则运算,确保结果不为负数
- **主要方法**:
- `GenerateNonNegativeExpression()`: 生成非负表达式
### MiddleSchoolGenerator (初中题目生成器)
**职责**: 生成初中难度的数学题目
- **特点**: 包含平方和开根号运算
- **主要方法**:
- `GenerateSquareOrRoot()`: 生成平方或开根号表达式
### HighSchoolGenerator (高中题目生成器)
**职责**: 生成高中难度的数学题目
- **特点**: 包含三角函数运算
- **主要方法**:
- `GenerateTrigonometricFunction()`: 生成三角函数表达式
### ProblemGeneratorFactory (生成器工厂)
**职责**: 创建指定类型的题目生成器
- **主要方法**:
- `CreateGenerator()`: 根据类型创建生成器实例
### DuplicateChecker (重复检查器)
**文件**: `duplicate_checker.h`, `duplicate_checker.cc`
- **职责**: 管理用户已生成的题目,防止重复
- **主要成员**:
- `user_problems_`: 用户题目映射表
- `loaded_users_`: 已加载历史的用户集合
- **主要方法**:
- `AddProblem()`: 添加题目到用户记录
- `CheckDuplicate()`: 检查题目是否重复
- `LoadUserHistory()`: 加载用户历史题目
### FileManager (文件管理器)
**文件**: `file_manager.h`, `file_manager.cc`
- **职责**: 负责文件的创建、保存和加载操作
- **主要方法**:
- `CreateUserDirectory()`: 创建用户目录
- `SaveProblemsToFile()`: 保存题目到文件
- `LoadUserHistoryProblems()`: 加载用户历史题目
### Logger (日志记录器)
**文件**: `logger.h`, `logger.cc`
- **职责**: 提供分级日志记录功能
- **日志级别**: DEBUG, INFO, WARNING, ERROR
- **主要方法**:
- `Log()`: 记录日志
- `Debug()`, `Info()`, `Warning()`, `Error()`: 便捷方法
### InputValidator (输入验证器)
**文件**: `input_validator.h`, `input_validator.cc`
- **职责**: 提供各种输入数据的验证功能
- **主要方法**:
- `ValidateUsername()`: 验证用户名格式
- `ValidatePassword()`: 验证密码格式
- `ValidateUserType()`: 验证用户类型
---
## 接口和数据类
### BackendInterface (后端接口)
**文件**: `backend_interface.h`
- **职责**: 定义前后端通信的抽象接口
- **主要方法**:
- `UserLogin()`, `UserRegister()`: 用户认证
- `GenerateQuestions()`: 生成题目
- `SubmitAnswers()`: 提交答案
- `SendVerificationCode()`: 发送验证码
### BackendImpl (后端实现)
**文件**: `backend_interface.cc`
- **职责**: 实现BackendInterface具体处理后端逻辑
- **主要成员**:
- `exam_system_`: ExamSystem核心实例
- `verification_codes_`: 验证码管理
- `user_questions_`: 用户题目缓存
- **主要方法**:
- `GenerateOptions()`: 生成选择题选项
- `SendEmailViaCurl()`: 通过libcurl发送邮件
---
## 数据结构
### UserInfo (用户信息)
```cpp
struct UserInfo {
std::string username;
std::string password;
std::string user_type; // 小学/初中/高中
std::string email;
};
```
### QuestionInfo (题目信息)
```cpp
struct QuestionInfo {
int id;
std::string content;
std::vector<std::string> options;
int correct_answer; // 0-3 对应ABCD
};
```
### TestResult (测试结果)
```cpp
struct TestResult {
int total_questions;
int correct_answers;
double score;
std::string difficulty;
};
```
### VerificationCode (验证码信息)
```cpp
struct VerificationCode {
std::string code;
std::time_t generate_time;
std::string email;
};
```
---
## 设计模式应用
1. **工厂模式**: `ProblemGeneratorFactory` 创建不同类型的题目生成器
2. **策略模式**: 不同难度的题目生成器实现相同的接口
3. **观察者模式**: Qt的信号槽机制实现组件间通信
4. **单例模式**: `Logger` 提供全局日志服务
5. **门面模式**: `BackendImpl` 封装复杂后端逻辑,提供简单接口
## 数据流说明
```
用户操作 → 前端界面 → BackendInterface → BackendImpl → ExamSystem
↓ ↓
界面更新 ← 信号槽 ← 返回结果 ← 业务处理 ← 题目生成器
```
这个类结构体现了清晰的分层架构,前端负责用户交互,后端处理业务逻辑,接口层负责通信协调,使得系统具有良好的可维护性和可扩展性。

@ -29,3 +29,4 @@ CONFIG += embed_translations
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

@ -1,687 +0,0 @@
#############################################################################
# Makefile for building: examSystem
# Generated by qmake (3.1) (Qt 6.5.3)
# Project: examSystem.pro
# Template: app
# Command: E:\Qt\6.5.3\mingw_64\bin\qmake.exe -o Makefile examSystem.pro
#############################################################################
MAKEFILE = Makefile
EQ = =
first: release
install: release-install
uninstall: release-uninstall
QMAKE = E:\Qt\6.5.3\mingw_64\bin\qmake.exe
DEL_FILE = del
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
COPY = copy /y
COPY_FILE = copy /y
COPY_DIR = xcopy /s /q /y /i
INSTALL_FILE = copy /y
INSTALL_PROGRAM = copy /y
INSTALL_DIR = xcopy /s /q /y /i
QINSTALL = E:\Qt\6.5.3\mingw_64\bin\qmake.exe -install qinstall
QINSTALL_PROGRAM = E:\Qt\6.5.3\mingw_64\bin\qmake.exe -install qinstall -exe
DEL_FILE = del
SYMLINK = $(QMAKE) -install ln -f -s
DEL_DIR = rmdir
MOVE = move
IDC = idc
IDL = midl
ZIP = zip -r -9
DEF_FILE =
RES_FILE =
SED = $(QMAKE) -install sed
MOVE = move
SUBTARGETS = \
release \
debug
release: FORCE
$(MAKE) -f $(MAKEFILE).Release
release-make_first: FORCE
$(MAKE) -f $(MAKEFILE).Release
release-all: FORCE
$(MAKE) -f $(MAKEFILE).Release all
release-clean: FORCE
$(MAKE) -f $(MAKEFILE).Release clean
release-distclean: FORCE
$(MAKE) -f $(MAKEFILE).Release distclean
release-install: FORCE
$(MAKE) -f $(MAKEFILE).Release install
release-uninstall: FORCE
$(MAKE) -f $(MAKEFILE).Release uninstall
debug: FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-make_first: FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-all: FORCE
$(MAKE) -f $(MAKEFILE).Debug all
debug-clean: FORCE
$(MAKE) -f $(MAKEFILE).Debug clean
debug-distclean: FORCE
$(MAKE) -f $(MAKEFILE).Debug distclean
debug-install: FORCE
$(MAKE) -f $(MAKEFILE).Debug install
debug-uninstall: FORCE
$(MAKE) -f $(MAKEFILE).Debug uninstall
Makefile: examSystem.pro ../../../Qt/6.5.3/mingw_64/mkspecs/win32-g++/qmake.conf ../../../Qt/6.5.3/mingw_64/mkspecs/features/spec_pre.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/device_config.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/common/sanitize.conf \
../../../Qt/6.5.3/mingw_64/mkspecs/common/gcc-base.conf \
../../../Qt/6.5.3/mingw_64/mkspecs/common/g++-base.conf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/common/windows-vulkan.conf \
../../../Qt/6.5.3/mingw_64/mkspecs/common/g++-win32.conf \
../../../Qt/6.5.3/mingw_64/mkspecs/common/windows-desktop.conf \
../../../Qt/6.5.3/mingw_64/mkspecs/qconfig.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_ext_freetype.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_ext_libpng.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3danimation.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3danimation_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dcore.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dcore_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dextras.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dextras_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dinput.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dinput_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dlogic.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dlogic_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquick.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquick_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickanimation.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickextras.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickextras_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickinput.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickinput_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickrender.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickrender_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene2d.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3drender.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3drender_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_activeqt.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_activeqt_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axbase_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axcontainer.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axcontainer_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axserver.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axserver_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_bluetooth.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_bluetooth_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_bodymovin_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_charts.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_charts_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_concurrent.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_core.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_core_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_datavisualization.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_datavisualization_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_datavisualizationqml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_datavisualizationqml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_dbus.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_designer.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_designer_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_grpc.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_grpc_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_gui.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_gui_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_help.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_help_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_httpserver.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_httpserver_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_insighttracker.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_insighttracker_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_insighttrackerqml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_insighttrackerqml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_jsonrpc_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labssettings.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_languageserver_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_linguist.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_linguist_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_location.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_location_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimedia.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_network.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_network_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_networkauth.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_networkauth_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_nfc.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_nfc_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_opengl.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_png_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_positioning.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_positioning_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_positioningquick.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_positioningquick_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_printsupport.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_protobuf.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_protobuf_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmltest.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3d.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysics.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysics_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysicshelpers_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_remoteobjects.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_remoteobjects_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_remoteobjectsqml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_remoteobjectsqml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_repparser.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_repparser_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_scxml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_scxml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_scxmlqml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_scxmlqml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sensors.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sensors_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sensorsquick.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sensorsquick_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_serialbus.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_serialbus_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_serialport.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_serialport_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_shadertools.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sql.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sql_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_statemachine.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_statemachine_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_statemachineqml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_statemachineqml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_svg.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_svg_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_testlib.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_texttospeech.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_texttospeech_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_tools_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_uitools.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboard.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboard_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webchannel.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webchannel_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_websockets.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_websockets_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webview.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webview_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webviewquick.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webviewquick_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_widgets.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_xml.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_xml_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri \
../../../Qt/6.5.3/mingw_64/mkspecs/features/qt_functions.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/qt_config.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/win32-g++/qmake.conf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/spec_post.prf \
../.qmake.stash \
../../../Qt/6.5.3/mingw_64/mkspecs/features/exclusive_builds.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/toolchain.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/default_pre.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/win32/default_pre.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/resolve_config.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/exclusive_builds_post.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/default_post.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/lrelease.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/entrypoint.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/precompile_header.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/warn_on.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/qt.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/resources_functions.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/resources.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/moc.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/win32/opengl.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/uic.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/qmake_use.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/file_copies.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/win32/windows.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/testcase_targets.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/exceptions.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/yacc.prf \
../../../Qt/6.5.3/mingw_64/mkspecs/features/lex.prf \
examSystem.pro \
../../../Qt/6.5.3/mingw_64/lib/Qt6Widgets.prl \
../../../Qt/6.5.3/mingw_64/lib/Qt6Gui.prl \
../../../Qt/6.5.3/mingw_64/lib/Qt6Core.prl \
../../../Qt/6.5.3/mingw_64/lib/Qt6EntryPoint.prl \
../../../Qt/6.5.3/mingw_64/mkspecs/features/build_pass.prf \
release/qmake_qmake_qm_files.qrc \
debug/qmake_qmake_qm_files.qrc
$(QMAKE) -o Makefile examSystem.pro
../../../Qt/6.5.3/mingw_64/mkspecs/features/spec_pre.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/device_config.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/common/sanitize.conf:
../../../Qt/6.5.3/mingw_64/mkspecs/common/gcc-base.conf:
../../../Qt/6.5.3/mingw_64/mkspecs/common/g++-base.conf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/common/windows-vulkan.conf:
../../../Qt/6.5.3/mingw_64/mkspecs/common/g++-win32.conf:
../../../Qt/6.5.3/mingw_64/mkspecs/common/windows-desktop.conf:
../../../Qt/6.5.3/mingw_64/mkspecs/qconfig.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_ext_freetype.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_ext_libpng.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3danimation.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3danimation_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dcore.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dcore_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dextras.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dextras_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dinput.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dinput_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dlogic.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dlogic_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquick.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquick_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickanimation.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickextras.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickextras_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickinput.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickinput_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickrender.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickrender_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene2d.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3drender.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_3drender_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_activeqt.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_activeqt_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axbase_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axcontainer.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axcontainer_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axserver.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_axserver_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_bluetooth.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_bluetooth_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_bodymovin_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_charts.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_charts_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_concurrent.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_core.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_core_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_datavisualization.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_datavisualization_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_datavisualizationqml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_datavisualizationqml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_dbus.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_designer.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_designer_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_grpc.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_grpc_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_gui.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_gui_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_help.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_help_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_httpserver.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_httpserver_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_insighttracker.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_insighttracker_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_insighttrackerqml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_insighttrackerqml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_jsonrpc_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labssettings.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_languageserver_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_linguist.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_linguist_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_location.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_location_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimedia.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_network.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_network_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_networkauth.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_networkauth_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_nfc.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_nfc_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_opengl.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_png_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_positioning.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_positioning_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_positioningquick.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_positioningquick_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_printsupport.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_protobuf.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_protobuf_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmltest.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3d.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysics.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysics_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysicshelpers_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quick_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_remoteobjects.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_remoteobjects_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_remoteobjectsqml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_remoteobjectsqml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_repparser.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_repparser_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_scxml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_scxml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_scxmlqml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_scxmlqml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sensors.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sensors_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sensorsquick.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sensorsquick_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_serialbus.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_serialbus_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_serialport.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_serialport_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_shadertools.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sql.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_sql_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_statemachine.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_statemachine_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_statemachineqml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_statemachineqml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_svg.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_svg_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_testlib.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_texttospeech.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_texttospeech_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_tools_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_uitools.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboard.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboard_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webchannel.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webchannel_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_websockets.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_websockets_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webview.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webview_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webviewquick.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_webviewquick_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_widgets.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_xml.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_xml_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri:
../../../Qt/6.5.3/mingw_64/mkspecs/features/qt_functions.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/qt_config.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/win32-g++/qmake.conf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/spec_post.prf:
../.qmake.stash:
../../../Qt/6.5.3/mingw_64/mkspecs/features/exclusive_builds.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/toolchain.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/default_pre.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/win32/default_pre.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/resolve_config.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/exclusive_builds_post.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/default_post.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/lrelease.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/entrypoint.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/precompile_header.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/warn_on.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/qt.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/resources_functions.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/resources.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/moc.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/win32/opengl.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/uic.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/qmake_use.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/file_copies.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/win32/windows.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/testcase_targets.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/exceptions.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/yacc.prf:
../../../Qt/6.5.3/mingw_64/mkspecs/features/lex.prf:
examSystem.pro:
../../../Qt/6.5.3/mingw_64/lib/Qt6Widgets.prl:
../../../Qt/6.5.3/mingw_64/lib/Qt6Gui.prl:
../../../Qt/6.5.3/mingw_64/lib/Qt6Core.prl:
../../../Qt/6.5.3/mingw_64/lib/Qt6EntryPoint.prl:
../../../Qt/6.5.3/mingw_64/mkspecs/features/build_pass.prf:
release/qmake_qmake_qm_files.qrc:
debug/qmake_qmake_qm_files.qrc:
qmake: FORCE
@$(QMAKE) -o Makefile examSystem.pro
qmake_all: FORCE
make_first: release-make_first debug-make_first FORCE
all: release-all debug-all FORCE
clean: release-clean debug-clean FORCE
distclean: release-distclean debug-distclean FORCE
-$(DEL_FILE) Makefile
release-mocclean:
$(MAKE) -f $(MAKEFILE).Release mocclean
debug-mocclean:
$(MAKE) -f $(MAKEFILE).Debug mocclean
mocclean: release-mocclean debug-mocclean
release-mocables:
$(MAKE) -f $(MAKEFILE).Release mocables
debug-mocables:
$(MAKE) -f $(MAKEFILE).Debug mocables
mocables: release-mocables debug-mocables
check: first
benchmark: first
FORCE:
.SUFFIXES:
$(MAKEFILE).Release: Makefile
$(MAKEFILE).Debug: Makefile

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,14 +0,0 @@
debug/main.o
debug/main_window.o
debug/login_widget.o
debug/selection_widget.o
debug/question_widget.o
debug/result_widget.o
debug/base_widget.o
debug/qrc_qmake_qmake_qm_files.o
debug/moc_main_window.o
debug/moc_login_widget.o
debug/moc_selection_widget.o
debug/moc_question_widget.o
debug/moc_result_widget.o
debug/moc_base_widget.o

@ -1,5 +0,0 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="i18n">
<file alias="examSystem_zh_CN.qm">E:/qt_project/examSystem/frontend/debug/examSystem_zh_CN.qm</file>
</qresource>
</RCC>

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN"></TS>

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>25</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1,115 +0,0 @@
/****************************************************************************
** Meta object code from reading C++ file 'base_widget.h'
**
** Created by: The Qt Meta Object Compiler version 68 (Qt 6.5.3)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../src/base_widget.h"
#include <QtCore/qmetatype.h>
#if __has_include(<QtCore/qtmochelpers.h>)
#include <QtCore/qtmochelpers.h>
#else
QT_BEGIN_MOC_NAMESPACE
#endif
#include <memory>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'base_widget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 68
#error "This file was generated using the moc from 6.5.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
#ifndef Q_CONSTINIT
#define Q_CONSTINIT
#endif
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_DISABLE_GCC("-Wuseless-cast")
namespace {
#ifdef QT_MOC_HAS_STRINGDATA
struct qt_meta_stringdata_CLASSBaseWidgetENDCLASS_t {};
static constexpr auto qt_meta_stringdata_CLASSBaseWidgetENDCLASS = QtMocHelpers::stringData(
"BaseWidget"
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSBaseWidgetENDCLASS_t {
uint offsetsAndSizes[2];
char stringdata0[11];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSBaseWidgetENDCLASS_t::offsetsAndSizes) + ofs), len
Q_CONSTINIT static const qt_meta_stringdata_CLASSBaseWidgetENDCLASS_t qt_meta_stringdata_CLASSBaseWidgetENDCLASS = {
{
QT_MOC_LITERAL(0, 10) // "BaseWidget"
},
"BaseWidget"
};
#undef QT_MOC_LITERAL
#endif // !QT_MOC_HAS_STRING_DATA
} // unnamed namespace
Q_CONSTINIT static const uint qt_meta_data_CLASSBaseWidgetENDCLASS[] = {
// content:
11, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
Q_CONSTINIT const QMetaObject BaseWidget::staticMetaObject = { {
QMetaObject::SuperData::link<QWidget::staticMetaObject>(),
qt_meta_stringdata_CLASSBaseWidgetENDCLASS.offsetsAndSizes,
qt_meta_data_CLASSBaseWidgetENDCLASS,
qt_static_metacall,
nullptr,
qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSBaseWidgetENDCLASS_t,
// Q_OBJECT / Q_GADGET
QtPrivate::TypeAndForceComplete<BaseWidget, std::true_type>
>,
nullptr
} };
void BaseWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
(void)_o;
(void)_id;
(void)_c;
(void)_a;
}
const QMetaObject *BaseWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *BaseWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_CLASSBaseWidgetENDCLASS.stringdata0))
return static_cast<void*>(this);
return QWidget::qt_metacast(_clname);
}
int BaseWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QWidget::qt_metacall(_c, _id, _a);
return _id;
}
QT_WARNING_POP

@ -1,234 +0,0 @@
/****************************************************************************
** Meta object code from reading C++ file 'login_widget.h'
**
** Created by: The Qt Meta Object Compiler version 68 (Qt 6.5.3)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../src/login_widget.h"
#include <QtGui/qtextcursor.h>
#include <QtCore/qmetatype.h>
#if __has_include(<QtCore/qtmochelpers.h>)
#include <QtCore/qtmochelpers.h>
#else
QT_BEGIN_MOC_NAMESPACE
#endif
#include <memory>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'login_widget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 68
#error "This file was generated using the moc from 6.5.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
#ifndef Q_CONSTINIT
#define Q_CONSTINIT
#endif
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_DISABLE_GCC("-Wuseless-cast")
namespace {
#ifdef QT_MOC_HAS_STRINGDATA
struct qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t {};
static constexpr auto qt_meta_stringdata_CLASSLoginWidgetENDCLASS = QtMocHelpers::stringData(
"LoginWidget",
"loginSuccess",
"",
"registerSuccess",
"onLoginClicked",
"showRegisterPage",
"showLoginPage",
"onRegisterClicked",
"onSendCodeClicked"
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t {
uint offsetsAndSizes[18];
char stringdata0[12];
char stringdata1[13];
char stringdata2[1];
char stringdata3[16];
char stringdata4[15];
char stringdata5[17];
char stringdata6[14];
char stringdata7[18];
char stringdata8[18];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t::offsetsAndSizes) + ofs), len
Q_CONSTINIT static const qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t qt_meta_stringdata_CLASSLoginWidgetENDCLASS = {
{
QT_MOC_LITERAL(0, 11), // "LoginWidget"
QT_MOC_LITERAL(12, 12), // "loginSuccess"
QT_MOC_LITERAL(25, 0), // ""
QT_MOC_LITERAL(26, 15), // "registerSuccess"
QT_MOC_LITERAL(42, 14), // "onLoginClicked"
QT_MOC_LITERAL(57, 16), // "showRegisterPage"
QT_MOC_LITERAL(74, 13), // "showLoginPage"
QT_MOC_LITERAL(88, 17), // "onRegisterClicked"
QT_MOC_LITERAL(106, 17) // "onSendCodeClicked"
},
"LoginWidget",
"loginSuccess",
"",
"registerSuccess",
"onLoginClicked",
"showRegisterPage",
"showLoginPage",
"onRegisterClicked",
"onSendCodeClicked"
};
#undef QT_MOC_LITERAL
#endif // !QT_MOC_HAS_STRING_DATA
} // unnamed namespace
Q_CONSTINIT static const uint qt_meta_data_CLASSLoginWidgetENDCLASS[] = {
// content:
11, // revision
0, // classname
0, 0, // classinfo
7, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
2, // signalCount
// signals: name, argc, parameters, tag, flags, initial metatype offsets
1, 0, 56, 2, 0x06, 1 /* Public */,
3, 0, 57, 2, 0x06, 2 /* Public */,
// slots: name, argc, parameters, tag, flags, initial metatype offsets
4, 0, 58, 2, 0x08, 3 /* Private */,
5, 0, 59, 2, 0x08, 4 /* Private */,
6, 0, 60, 2, 0x08, 5 /* Private */,
7, 0, 61, 2, 0x08, 6 /* Private */,
8, 0, 62, 2, 0x08, 7 /* Private */,
// signals: parameters
QMetaType::Void,
QMetaType::Void,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
0 // eod
};
Q_CONSTINIT const QMetaObject LoginWidget::staticMetaObject = { {
QMetaObject::SuperData::link<BaseWidget::staticMetaObject>(),
qt_meta_stringdata_CLASSLoginWidgetENDCLASS.offsetsAndSizes,
qt_meta_data_CLASSLoginWidgetENDCLASS,
qt_static_metacall,
nullptr,
qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t,
// Q_OBJECT / Q_GADGET
QtPrivate::TypeAndForceComplete<LoginWidget, std::true_type>,
// method 'loginSuccess'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'registerSuccess'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onLoginClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'showRegisterPage'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'showLoginPage'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onRegisterClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onSendCodeClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>
>,
nullptr
} };
void LoginWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<LoginWidget *>(_o);
(void)_t;
switch (_id) {
case 0: _t->loginSuccess(); break;
case 1: _t->registerSuccess(); break;
case 2: _t->onLoginClicked(); break;
case 3: _t->showRegisterPage(); break;
case 4: _t->showLoginPage(); break;
case 5: _t->onRegisterClicked(); break;
case 6: _t->onSendCodeClicked(); break;
default: ;
}
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
{
using _t = void (LoginWidget::*)();
if (_t _q_method = &LoginWidget::loginSuccess; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 0;
return;
}
}
{
using _t = void (LoginWidget::*)();
if (_t _q_method = &LoginWidget::registerSuccess; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 1;
return;
}
}
}
(void)_a;
}
const QMetaObject *LoginWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *LoginWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_CLASSLoginWidgetENDCLASS.stringdata0))
return static_cast<void*>(this);
return BaseWidget::qt_metacast(_clname);
}
int LoginWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = BaseWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 7)
qt_static_metacall(this, _c, _id, _a);
_id -= 7;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 7)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 7;
}
return _id;
}
// SIGNAL 0
void LoginWidget::loginSuccess()
{
QMetaObject::activate(this, &staticMetaObject, 0, nullptr);
}
// SIGNAL 1
void LoginWidget::registerSuccess()
{
QMetaObject::activate(this, &staticMetaObject, 1, nullptr);
}
QT_WARNING_POP

@ -1,234 +0,0 @@
/****************************************************************************
** Meta object code from reading C++ file 'loginwidget.h'
**
** Created by: The Qt Meta Object Compiler version 68 (Qt 6.5.3)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../src/loginwidget.h"
#include <QtGui/qtextcursor.h>
#include <QtCore/qmetatype.h>
#if __has_include(<QtCore/qtmochelpers.h>)
#include <QtCore/qtmochelpers.h>
#else
QT_BEGIN_MOC_NAMESPACE
#endif
#include <memory>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'loginwidget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 68
#error "This file was generated using the moc from 6.5.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
#ifndef Q_CONSTINIT
#define Q_CONSTINIT
#endif
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_DISABLE_GCC("-Wuseless-cast")
namespace {
#ifdef QT_MOC_HAS_STRINGDATA
struct qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t {};
static constexpr auto qt_meta_stringdata_CLASSLoginWidgetENDCLASS = QtMocHelpers::stringData(
"LoginWidget",
"loginSuccess",
"",
"registerSuccess",
"onLoginClicked",
"showRegisterPage",
"showLoginPage",
"onRegisterClicked",
"onSendCodeClicked"
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t {
uint offsetsAndSizes[18];
char stringdata0[12];
char stringdata1[13];
char stringdata2[1];
char stringdata3[16];
char stringdata4[15];
char stringdata5[17];
char stringdata6[14];
char stringdata7[18];
char stringdata8[18];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t::offsetsAndSizes) + ofs), len
Q_CONSTINIT static const qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t qt_meta_stringdata_CLASSLoginWidgetENDCLASS = {
{
QT_MOC_LITERAL(0, 11), // "LoginWidget"
QT_MOC_LITERAL(12, 12), // "loginSuccess"
QT_MOC_LITERAL(25, 0), // ""
QT_MOC_LITERAL(26, 15), // "registerSuccess"
QT_MOC_LITERAL(42, 14), // "onLoginClicked"
QT_MOC_LITERAL(57, 16), // "showRegisterPage"
QT_MOC_LITERAL(74, 13), // "showLoginPage"
QT_MOC_LITERAL(88, 17), // "onRegisterClicked"
QT_MOC_LITERAL(106, 17) // "onSendCodeClicked"
},
"LoginWidget",
"loginSuccess",
"",
"registerSuccess",
"onLoginClicked",
"showRegisterPage",
"showLoginPage",
"onRegisterClicked",
"onSendCodeClicked"
};
#undef QT_MOC_LITERAL
#endif // !QT_MOC_HAS_STRING_DATA
} // unnamed namespace
Q_CONSTINIT static const uint qt_meta_data_CLASSLoginWidgetENDCLASS[] = {
// content:
11, // revision
0, // classname
0, 0, // classinfo
7, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
2, // signalCount
// signals: name, argc, parameters, tag, flags, initial metatype offsets
1, 0, 56, 2, 0x06, 1 /* Public */,
3, 0, 57, 2, 0x06, 2 /* Public */,
// slots: name, argc, parameters, tag, flags, initial metatype offsets
4, 0, 58, 2, 0x08, 3 /* Private */,
5, 0, 59, 2, 0x08, 4 /* Private */,
6, 0, 60, 2, 0x08, 5 /* Private */,
7, 0, 61, 2, 0x08, 6 /* Private */,
8, 0, 62, 2, 0x08, 7 /* Private */,
// signals: parameters
QMetaType::Void,
QMetaType::Void,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
0 // eod
};
Q_CONSTINIT const QMetaObject LoginWidget::staticMetaObject = { {
QMetaObject::SuperData::link<QWidget::staticMetaObject>(),
qt_meta_stringdata_CLASSLoginWidgetENDCLASS.offsetsAndSizes,
qt_meta_data_CLASSLoginWidgetENDCLASS,
qt_static_metacall,
nullptr,
qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSLoginWidgetENDCLASS_t,
// Q_OBJECT / Q_GADGET
QtPrivate::TypeAndForceComplete<LoginWidget, std::true_type>,
// method 'loginSuccess'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'registerSuccess'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onLoginClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'showRegisterPage'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'showLoginPage'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onRegisterClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onSendCodeClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>
>,
nullptr
} };
void LoginWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<LoginWidget *>(_o);
(void)_t;
switch (_id) {
case 0: _t->loginSuccess(); break;
case 1: _t->registerSuccess(); break;
case 2: _t->onLoginClicked(); break;
case 3: _t->showRegisterPage(); break;
case 4: _t->showLoginPage(); break;
case 5: _t->onRegisterClicked(); break;
case 6: _t->onSendCodeClicked(); break;
default: ;
}
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
{
using _t = void (LoginWidget::*)();
if (_t _q_method = &LoginWidget::loginSuccess; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 0;
return;
}
}
{
using _t = void (LoginWidget::*)();
if (_t _q_method = &LoginWidget::registerSuccess; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 1;
return;
}
}
}
(void)_a;
}
const QMetaObject *LoginWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *LoginWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_CLASSLoginWidgetENDCLASS.stringdata0))
return static_cast<void*>(this);
return QWidget::qt_metacast(_clname);
}
int LoginWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 7)
qt_static_metacall(this, _c, _id, _a);
_id -= 7;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 7)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 7;
}
return _id;
}
// SIGNAL 0
void LoginWidget::loginSuccess()
{
QMetaObject::activate(this, &staticMetaObject, 0, nullptr);
}
// SIGNAL 1
void LoginWidget::registerSuccess()
{
QMetaObject::activate(this, &staticMetaObject, 1, nullptr);
}
QT_WARNING_POP

@ -1,193 +0,0 @@
/****************************************************************************
** Meta object code from reading C++ file 'main_window.h'
**
** Created by: The Qt Meta Object Compiler version 68 (Qt 6.5.3)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../src/main_window.h"
#include <QtGui/qtextcursor.h>
#include <QtCore/qmetatype.h>
#if __has_include(<QtCore/qtmochelpers.h>)
#include <QtCore/qtmochelpers.h>
#else
QT_BEGIN_MOC_NAMESPACE
#endif
#include <memory>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'main_window.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 68
#error "This file was generated using the moc from 6.5.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
#ifndef Q_CONSTINIT
#define Q_CONSTINIT
#endif
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_DISABLE_GCC("-Wuseless-cast")
namespace {
#ifdef QT_MOC_HAS_STRINGDATA
struct qt_meta_stringdata_CLASSMainWindowENDCLASS_t {};
static constexpr auto qt_meta_stringdata_CLASSMainWindowENDCLASS = QtMocHelpers::stringData(
"MainWindow",
"showSelection",
"",
"showQuestions",
"difficulty",
"count",
"showResult",
"TestResult",
"result",
"restartFromResult"
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSMainWindowENDCLASS_t {
uint offsetsAndSizes[20];
char stringdata0[11];
char stringdata1[14];
char stringdata2[1];
char stringdata3[14];
char stringdata4[11];
char stringdata5[6];
char stringdata6[11];
char stringdata7[11];
char stringdata8[7];
char stringdata9[18];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSMainWindowENDCLASS_t::offsetsAndSizes) + ofs), len
Q_CONSTINIT static const qt_meta_stringdata_CLASSMainWindowENDCLASS_t qt_meta_stringdata_CLASSMainWindowENDCLASS = {
{
QT_MOC_LITERAL(0, 10), // "MainWindow"
QT_MOC_LITERAL(11, 13), // "showSelection"
QT_MOC_LITERAL(25, 0), // ""
QT_MOC_LITERAL(26, 13), // "showQuestions"
QT_MOC_LITERAL(40, 10), // "difficulty"
QT_MOC_LITERAL(51, 5), // "count"
QT_MOC_LITERAL(57, 10), // "showResult"
QT_MOC_LITERAL(68, 10), // "TestResult"
QT_MOC_LITERAL(79, 6), // "result"
QT_MOC_LITERAL(86, 17) // "restartFromResult"
},
"MainWindow",
"showSelection",
"",
"showQuestions",
"difficulty",
"count",
"showResult",
"TestResult",
"result",
"restartFromResult"
};
#undef QT_MOC_LITERAL
#endif // !QT_MOC_HAS_STRING_DATA
} // unnamed namespace
Q_CONSTINIT static const uint qt_meta_data_CLASSMainWindowENDCLASS[] = {
// content:
11, // revision
0, // classname
0, 0, // classinfo
4, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
// slots: name, argc, parameters, tag, flags, initial metatype offsets
1, 0, 38, 2, 0x08, 1 /* Private */,
3, 2, 39, 2, 0x08, 2 /* Private */,
6, 1, 44, 2, 0x08, 5 /* Private */,
9, 0, 47, 2, 0x08, 7 /* Private */,
// slots: parameters
QMetaType::Void,
QMetaType::Void, QMetaType::QString, QMetaType::Int, 4, 5,
QMetaType::Void, 0x80000000 | 7, 8,
QMetaType::Void,
0 // eod
};
Q_CONSTINIT const QMetaObject MainWindow::staticMetaObject = { {
QMetaObject::SuperData::link<QMainWindow::staticMetaObject>(),
qt_meta_stringdata_CLASSMainWindowENDCLASS.offsetsAndSizes,
qt_meta_data_CLASSMainWindowENDCLASS,
qt_static_metacall,
nullptr,
qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSMainWindowENDCLASS_t,
// Q_OBJECT / Q_GADGET
QtPrivate::TypeAndForceComplete<MainWindow, std::true_type>,
// method 'showSelection'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'showQuestions'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
QtPrivate::TypeAndForceComplete<const QString &, std::false_type>,
QtPrivate::TypeAndForceComplete<int, std::false_type>,
// method 'showResult'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
QtPrivate::TypeAndForceComplete<const TestResult &, std::false_type>,
// method 'restartFromResult'
QtPrivate::TypeAndForceComplete<void, std::false_type>
>,
nullptr
} };
void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<MainWindow *>(_o);
(void)_t;
switch (_id) {
case 0: _t->showSelection(); break;
case 1: _t->showQuestions((*reinterpret_cast< std::add_pointer_t<QString>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<int>>(_a[2]))); break;
case 2: _t->showResult((*reinterpret_cast< std::add_pointer_t<TestResult>>(_a[1]))); break;
case 3: _t->restartFromResult(); break;
default: ;
}
}
}
const QMetaObject *MainWindow::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *MainWindow::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_CLASSMainWindowENDCLASS.stringdata0))
return static_cast<void*>(this);
return QMainWindow::qt_metacast(_clname);
}
int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QMainWindow::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 4)
qt_static_metacall(this, _c, _id, _a);
_id -= 4;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 4)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 4;
}
return _id;
}
QT_WARNING_POP

@ -1,439 +0,0 @@
#define __DBL_MIN_EXP__ (-1021)
#define __cpp_attributes 200809L
#define __cpp_nontype_template_parameter_auto 201606L
#define __UINT_LEAST16_MAX__ 0xffff
#define __ATOMIC_ACQUIRE 2
#define __FLT128_MAX_10_EXP__ 4932
#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
#define __GCC_IEC_559_COMPLEX 2
#define __cpp_aggregate_nsdmi 201304L
#define __UINT_LEAST8_TYPE__ unsigned char
#define __SIZEOF_FLOAT80__ 16
#define __INTMAX_C(c) c ## LL
#define __CHAR_BIT__ 8
#define __MINGW32__ 1
#define __UINT8_MAX__ 0xff
#define __SCHAR_WIDTH__ 8
#define _WIN64 1
#define __WINT_MAX__ 0xffff
#define __FLT32_MIN_EXP__ (-125)
#define __cpp_static_assert 201411L
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __SIZE_MAX__ 0xffffffffffffffffULL
#define __WCHAR_MAX__ 0xffff
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L)
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
#define __GCC_IEC_559 2
#define __FLT32X_DECIMAL_DIG__ 17
#define __FLT_EVAL_METHOD__ 0
#define __cpp_binary_literals 201304L
#define __FLT64_DECIMAL_DIG__ 17
#define __cpp_noexcept_function_type 201510L
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
#define __cpp_variadic_templates 200704L
#define __UINT_FAST64_MAX__ 0xffffffffffffffffULL
#define __SIG_ATOMIC_TYPE__ int
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __cpp_variable_templates 201304L
#define __FLT32X_MAX_EXP__ 1024
#define __FLT32_HAS_DENORM__ 1
#define __UINT_FAST8_MAX__ 0xff
#define __cpp_rvalue_reference 200610L
#define __cpp_nested_namespace_definitions 201411L
#define _stdcall __attribute__((__stdcall__))
#define __DEC64_MAX_EXP__ 385
#define __INT8_C(c) c
#define __INT_LEAST8_WIDTH__ 8
#define __cpp_variadic_using 201611L
#define __UINT_LEAST64_MAX__ 0xffffffffffffffffULL
#define __INT_LEAST8_MAX__ 0x7f
#define __cpp_capture_star_this 201603L
#define __SHRT_MAX__ 0x7fff
#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L
#define __FLT64X_MAX_10_EXP__ 4932
#define __cpp_if_constexpr 201606L
#define __LDBL_IS_IEC_60559__ 2
#define __FLT64X_HAS_QUIET_NAN__ 1
#define __UINT_LEAST8_MAX__ 0xff
#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
#define __UINTMAX_TYPE__ long long unsigned int
#define __DEC32_EPSILON__ 1E-6DF
#define __FLT_EVAL_METHOD_TS_18661_3__ 0
#define __OPTIMIZE__ 1
#define __UINT32_MAX__ 0xffffffffU
#define __GXX_EXPERIMENTAL_CXX0X__ 1
#define __FLT128_MIN_EXP__ (-16381)
#define __WINT_MIN__ 0
#define __FLT128_MIN_10_EXP__ (-4931)
#define __FLT32X_IS_IEC_60559__ 2
#define __INT_LEAST16_WIDTH__ 16
#define __SCHAR_MAX__ 0x7f
#define __FLT128_MANT_DIG__ 113
#define __WCHAR_MIN__ 0
#define __INT64_C(c) c ## LL
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
#define __FLT32X_MANT_DIG__ 53
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
#define __cpp_aligned_new 201606L
#define __USER_LABEL_PREFIX__
#define __FLT32_MAX_10_EXP__ 38
#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x
#define __STDC_HOSTED__ 1
#define __DEC64_MIN_EXP__ (-382)
#define __WIN64 1
#define __cpp_decltype_auto 201304L
#define __DBL_DIG__ 15
#define __FLT32_DIG__ 6
#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
#define __GXX_WEAK__ 1
#define __SHRT_WIDTH__ 16
#define __FLT32_IS_IEC_60559__ 2
#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
#define __DBL_IS_IEC_60559__ 2
#define __DEC32_MAX__ 9.999999E96DF
#define __cpp_threadsafe_static_init 200806L
#define __cpp_enumerator_attributes 201411L
#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x
#define __FLT32X_HAS_INFINITY__ 1
#define __INT32_MAX__ 0x7fffffff
#define __INT_WIDTH__ 32
#define __SIZEOF_LONG__ 4
#define __UINT16_C(c) c
#define __DECIMAL_DIG__ 21
#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
#define __INT16_MAX__ 0x7fff
#define __FLT64_MIN_EXP__ (-1021)
#define __FLT64X_MIN_10_EXP__ (-4931)
#define __LDBL_HAS_QUIET_NAN__ 1
#define __FLT64_MANT_DIG__ 53
#define _REENTRANT 1
#define __FLT64X_MANT_DIG__ 64
#define __GNUC__ 11
#define _cdecl __attribute__((__cdecl__))
#define __GXX_RTTI 1
#define __MMX__ 1
#define __FLT_HAS_DENORM__ 1
#define __SIZEOF_LONG_DOUBLE__ 16
#define __BIGGEST_ALIGNMENT__ 16
#define __STDC_UTF_16__ 1
#define __FLT64_MAX_10_EXP__ 308
#define __cpp_delegating_constructors 200604L
#define __FLT32_HAS_INFINITY__ 1
#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L)
#define _thiscall __attribute__((__thiscall__))
#define __cpp_raw_strings 200710L
#define __INT_FAST32_MAX__ 0x7fffffff
#define __WINNT 1
#define __DBL_HAS_INFINITY__ 1
#define __SIZEOF_FLOAT__ 4
#define __WINNT__ 1
#define __HAVE_SPECULATION_SAFE_VALUE 1
#define __cpp_fold_expressions 201603L
#define __DEC32_MIN_EXP__ (-94)
#define __INTPTR_WIDTH__ 64
#define __FLT64X_HAS_INFINITY__ 1
#define __UINT_LEAST32_MAX__ 0xffffffffU
#define __FLT32X_HAS_DENORM__ 1
#define __INT_FAST16_TYPE__ short int
#define __MMX_WITH_SSE__ 1
#define _fastcall __attribute__((__fastcall__))
#define __LDBL_HAS_DENORM__ 1
#define __cplusplus 201703L
#define __cpp_ref_qualifiers 200710L
#define __DEC32_MIN__ 1E-95DF
#define __DEPRECATED 1
#define __cpp_rvalue_references 200610L
#define __DBL_MAX_EXP__ 1024
#define __WCHAR_WIDTH__ 16
#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
#define __DEC128_EPSILON__ 1E-33DL
#define __SSE2_MATH__ 1
#define __ATOMIC_HLE_RELEASE 131072
#define __WIN32__ 1
#define __PTRDIFF_MAX__ 0x7fffffffffffffffLL
#define __amd64 1
#define __tune_core2__ 1
#define __ATOMIC_HLE_ACQUIRE 65536
#define __GNUG__ 11
#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
#define __SIZEOF_SIZE_T__ 8
#define __cpp_nsdmi 200809L
#define __FLT64X_MIN_EXP__ (-16381)
#define __SIZEOF_WINT_T__ 2
#define __LONG_LONG_WIDTH__ 64
#define __cpp_initializer_lists 200806L
#define __FLT32_MAX_EXP__ 128
#define __cpp_hex_float 201603L
#define __GXX_ABI_VERSION 1016
#define __FLT128_HAS_INFINITY__ 1
#define __FLT_MIN_EXP__ (-125)
#define __x86_64 1
#define __cpp_lambdas 200907L
#define __INT_FAST64_TYPE__ long long int
#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
#define __cpp_template_auto 201606L
#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L)
#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x
#define __SIZEOF_POINTER__ 8
#define __SIZE_TYPE__ long long unsigned int
#define __DBL_HAS_QUIET_NAN__ 1
#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
#define __DECIMAL_BID_FORMAT__ 1
#define __GXX_TYPEINFO_EQUALITY_INLINE 0
#define __FLT64_MIN_10_EXP__ (-307)
#define __FLT64X_DECIMAL_DIG__ 21
#define __DEC128_MIN__ 1E-6143DL
#define __REGISTER_PREFIX__
#define __UINT16_MAX__ 0xffff
#define __cdecl __attribute__((__cdecl__))
#define __LDBL_HAS_INFINITY__ 1
#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
#define __UINT8_TYPE__ unsigned char
#define __FLT_DIG__ 6
#define __DEC_EVAL_METHOD__ 2
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
#define __FLT_MANT_DIG__ 24
#define __LDBL_DECIMAL_DIG__ 21
#define __VERSION__ "11.2.0"
#define __UINT64_C(c) c ## ULL
#define __cpp_unicode_characters 201411L
#define _WIN32 1
#define __SEH__ 1
#define __INT_LEAST32_MAX__ 0x7fffffff
#define __GCC_ATOMIC_INT_LOCK_FREE 2
#define __FLT128_MAX_EXP__ 16384
#define __FLT32_MANT_DIG__ 24
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
#define __cpp_aggregate_bases 201603L
#define __FLT128_HAS_DENORM__ 1
#define __FLT32_DECIMAL_DIG__ 9
#define __FLT128_DIG__ 33
#define __INT32_C(c) c
#define __DEC64_EPSILON__ 1E-15DD
#define __ORDER_PDP_ENDIAN__ 3412
#define __DEC128_MIN_EXP__ (-6142)
#define __INT_FAST32_TYPE__ int
#define __UINT_LEAST16_TYPE__ short unsigned int
#define __DBL_HAS_DENORM__ 1
#define __cpp_rtti 199711L
#define __UINT64_MAX__ 0xffffffffffffffffULL
#define __FLT_IS_IEC_60559__ 2
#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-16LE"
#define __FLT64X_DIG__ 18
#define __INT8_TYPE__ signed char
#define __cpp_digit_separators 201309L
#define __GCC_ASM_FLAG_OUTPUTS__ 1
#define __UINT32_TYPE__ unsigned int
#define __FLT_RADIX__ 2
#define __INT_LEAST16_TYPE__ short int
#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L
#define __UINTMAX_C(c) c ## ULL
#define __GLIBCXX_BITSIZE_INT_N_0 128
#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
#define __SIG_ATOMIC_MAX__ 0x7fffffff
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
#define __SIZEOF_PTRDIFF_T__ 8
#define __LDBL_DIG__ 18
#define __FLT64_IS_IEC_60559__ 2
#define __x86_64__ 1
#define __FLT32X_MIN_EXP__ (-1021)
#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
#define __MSVCRT__ 1
#define __INT_FAST16_MAX__ 0x7fff
#define __FLT64_DIG__ 15
#define __UINT_FAST32_MAX__ 0xffffffffU
#define __UINT_LEAST64_TYPE__ long long unsigned int
#define __FLT_HAS_QUIET_NAN__ 1
#define __FLT_MAX_10_EXP__ 38
#define __LONG_MAX__ 0x7fffffffL
#define __FLT64X_HAS_DENORM__ 1
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
#define __FLT_HAS_INFINITY__ 1
#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8"
#define __cpp_unicode_literals 200710L
#define __UINT_FAST16_TYPE__ short unsigned int
#define __DEC64_MAX__ 9.999999999999999E384DD
#define __INT_FAST32_WIDTH__ 32
#define __CHAR16_TYPE__ short unsigned int
#define __PRAGMA_REDEFINE_EXTNAME 1
#define __SIZE_WIDTH__ 64
#define __SEG_FS 1
#define __INT_LEAST16_MAX__ 0x7fff
#define __DEC64_MANT_DIG__ 16
#define __INT64_MAX__ 0x7fffffffffffffffLL
#define __SEG_GS 1
#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
#define __SIG_ATOMIC_WIDTH__ 32
#define __INT_LEAST64_TYPE__ long long int
#define __INT16_TYPE__ short int
#define __INT_LEAST8_TYPE__ signed char
#define __nocona__ 1
#define __cpp_structured_bindings 201606L
#define __SIZEOF_INT__ 4
#define __DEC32_MAX_EXP__ 97
#define __INT_FAST8_MAX__ 0x7f
#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
#define __INTPTR_MAX__ 0x7fffffffffffffffLL
#define __cpp_sized_deallocation 201309L
#define __cpp_guaranteed_copy_elision 201606L
#define __FLT64_HAS_QUIET_NAN__ 1
#define __stdcall __attribute__((__stdcall__))
#define __FLT32_MIN_10_EXP__ (-37)
#define __EXCEPTIONS 1
#define __GXX_MERGED_TYPEINFO_NAMES 0
#define __PTRDIFF_WIDTH__ 64
#define __LDBL_MANT_DIG__ 64
#define __cpp_range_based_for 201603L
#define __FLT64_HAS_INFINITY__ 1
#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x
#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
#define __GCC_ATOMIC_LONG_LOCK_FREE 2
#define __cpp_nontype_template_args 201411L
#define __DEC32_MANT_DIG__ 7
#define __cpp_return_type_deduction 201304L
#define __INTPTR_TYPE__ long long int
#define __UINT16_TYPE__ short unsigned int
#define __WCHAR_TYPE__ short unsigned int
#define __pic__ 1
#define __UINTPTR_MAX__ 0xffffffffffffffffULL
#define __INT_FAST64_WIDTH__ 64
#define __cpp_decltype 200707L
#define __INT_FAST64_MAX__ 0x7fffffffffffffffLL
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F
#define __FLT64X_MAX_EXP__ 16384
#define __UINT_FAST64_TYPE__ long long unsigned int
#define __cpp_inline_variables 201606L
#define __INT_MAX__ 0x7fffffff
#define WIN32 1
#define __nocona 1
#define __code_model_medium__ 1
#define __INT64_TYPE__ long long int
#define __FLT_MAX_EXP__ 128
#define WIN64 1
#define __ORDER_BIG_ENDIAN__ 4321
#define __DBL_MANT_DIG__ 53
#define __cpp_inheriting_constructors 201511L
#define __SIZEOF_FLOAT128__ 16
#define __INT_LEAST64_MAX__ 0x7fffffffffffffffLL
#define __DEC64_MIN__ 1E-383DD
#define __WINT_TYPE__ short unsigned int
#define __UINT_LEAST32_TYPE__ unsigned int
#define __SIZEOF_SHORT__ 2
#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32
#define __SSE__ 1
#define __LDBL_MIN_EXP__ (-16381)
#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
#define __amd64__ 1
#define __WINT_WIDTH__ 16
#define __INT_LEAST64_WIDTH__ 64
#define __LDBL_MAX_EXP__ 16384
#define __FLT32X_MAX_10_EXP__ 308
#define __WIN32 1
#define __SIZEOF_INT128__ 16
#define __FLT64X_IS_IEC_60559__ 2
#define __WCHAR_UNSIGNED__ 1
#define __LDBL_MAX_10_EXP__ 4932
#define __ATOMIC_RELAXED 0
#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L)
#define __thiscall __attribute__((__thiscall__))
#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
#define __UINT8_C(c) c
#define __FLT64_MAX_EXP__ 1024
#define __INT_LEAST32_TYPE__ int
#define __SIZEOF_WCHAR_T__ 2
#define __GNUC_PATCHLEVEL__ 0
#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128
#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64
#define __FLT128_HAS_QUIET_NAN__ 1
#define __INTMAX_MAX__ 0x7fffffffffffffffLL
#define __SSE3__ 1
#define __INT_FAST8_TYPE__ signed char
#define __fastcall __attribute__((__fastcall__))
#define __cpp_namespace_attributes 201411L
#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
#define __STDCPP_THREADS__ 1
#define __GNUC_STDC_INLINE__ 1
#define __FLT64_HAS_DENORM__ 1
#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
#define __DBL_DECIMAL_DIG__ 17
#define __STDC_UTF_32__ 1
#define __INT_FAST8_WIDTH__ 8
#define __FXSR__ 1
#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L)
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#define __MINGW64__ 1
#define __INTMAX_WIDTH__ 64
#define __cpp_runtime_arrays 198712L
#define __UINT64_TYPE__ long long unsigned int
#define __UINT32_C(c) c ## U
#define __cpp_alias_templates 200704L
#define WINNT 1
#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
#define __FLT128_IS_IEC_60559__ 2
#define __INT8_MAX__ 0x7f
#define __LONG_WIDTH__ 32
#define __PIC__ 1
#define __UINT_FAST32_TYPE__ unsigned int
#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x
#define __CHAR32_TYPE__ unsigned int
#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
#define __cpp_constexpr 201603L
#define __SSE2__ 1
#define __cpp_deduction_guides 201703L
#define __INT32_TYPE__ int
#define __SIZEOF_DOUBLE__ 8
#define __cpp_exceptions 199711L
#define __FLT_MIN_10_EXP__ (-37)
#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
#define __INT_LEAST32_WIDTH__ 32
#define __INTMAX_TYPE__ long long int
#define _INTEGRAL_MAX_BITS 64
#define __DEC128_MAX_EXP__ 6145
#define __FLT32X_HAS_QUIET_NAN__ 1
#define __ATOMIC_CONSUME 1
#define __GNUC_MINOR__ 2
#define __GLIBCXX_TYPE_INT_N_0 __int128
#define __INT_FAST16_WIDTH__ 16
#define __UINTMAX_MAX__ 0xffffffffffffffffULL
#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
#define __cpp_template_template_args 201611L
#define __DBL_MAX_10_EXP__ 308
#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L
#define __INT16_C(c) c
#define __STDC__ 1
#define __FLT32X_DIG__ 15
#define __PTRDIFF_TYPE__ long long int
#define __ATOMIC_SEQ_CST 5
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1
#define __FLT32X_MIN_10_EXP__ (-307)
#define __UINTPTR_TYPE__ long long unsigned int
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
#define __DEC128_MANT_DIG__ 34
#define __LDBL_MIN_10_EXP__ (-4931)
#define __cpp_generic_lambdas 201304L
#define __SSE_MATH__ 1
#define __SIZEOF_LONG_LONG__ 8
#define __cpp_user_defined_literals 200809L
#define __FLT128_DECIMAL_DIG__ 36
#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
#define __FLT32_HAS_QUIET_NAN__ 1
#define __FLT_DECIMAL_DIG__ 9
#define __UINT_FAST16_MAX__ 0xffff
#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L
#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
#define __UINT_FAST8_TYPE__ unsigned char
#define __WIN64__ 1
#define __cpp_init_captures 201304L
#define __ATOMIC_ACQ_REL 4
#define __ATOMIC_RELEASE 3
#define __declspec(x) __attribute__((x))

@ -1,194 +0,0 @@
/****************************************************************************
** Meta object code from reading C++ file 'question_widget.h'
**
** Created by: The Qt Meta Object Compiler version 68 (Qt 6.5.3)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../src/question_widget.h"
#include <QtGui/qtextcursor.h>
#include <QtCore/qmetatype.h>
#if __has_include(<QtCore/qtmochelpers.h>)
#include <QtCore/qtmochelpers.h>
#else
QT_BEGIN_MOC_NAMESPACE
#endif
#include <memory>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'question_widget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 68
#error "This file was generated using the moc from 6.5.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
#ifndef Q_CONSTINIT
#define Q_CONSTINIT
#endif
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_DISABLE_GCC("-Wuseless-cast")
namespace {
#ifdef QT_MOC_HAS_STRINGDATA
struct qt_meta_stringdata_CLASSQuestionWidgetENDCLASS_t {};
static constexpr auto qt_meta_stringdata_CLASSQuestionWidgetENDCLASS = QtMocHelpers::stringData(
"QuestionWidget",
"testCompleted",
"",
"TestResult",
"result",
"onNextClicked",
"onSubmitClicked"
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSQuestionWidgetENDCLASS_t {
uint offsetsAndSizes[14];
char stringdata0[15];
char stringdata1[14];
char stringdata2[1];
char stringdata3[11];
char stringdata4[7];
char stringdata5[14];
char stringdata6[16];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSQuestionWidgetENDCLASS_t::offsetsAndSizes) + ofs), len
Q_CONSTINIT static const qt_meta_stringdata_CLASSQuestionWidgetENDCLASS_t qt_meta_stringdata_CLASSQuestionWidgetENDCLASS = {
{
QT_MOC_LITERAL(0, 14), // "QuestionWidget"
QT_MOC_LITERAL(15, 13), // "testCompleted"
QT_MOC_LITERAL(29, 0), // ""
QT_MOC_LITERAL(30, 10), // "TestResult"
QT_MOC_LITERAL(41, 6), // "result"
QT_MOC_LITERAL(48, 13), // "onNextClicked"
QT_MOC_LITERAL(62, 15) // "onSubmitClicked"
},
"QuestionWidget",
"testCompleted",
"",
"TestResult",
"result",
"onNextClicked",
"onSubmitClicked"
};
#undef QT_MOC_LITERAL
#endif // !QT_MOC_HAS_STRING_DATA
} // unnamed namespace
Q_CONSTINIT static const uint qt_meta_data_CLASSQuestionWidgetENDCLASS[] = {
// content:
11, // revision
0, // classname
0, 0, // classinfo
3, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
1, // signalCount
// signals: name, argc, parameters, tag, flags, initial metatype offsets
1, 1, 32, 2, 0x06, 1 /* Public */,
// slots: name, argc, parameters, tag, flags, initial metatype offsets
5, 0, 35, 2, 0x08, 3 /* Private */,
6, 0, 36, 2, 0x08, 4 /* Private */,
// signals: parameters
QMetaType::Void, 0x80000000 | 3, 4,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
0 // eod
};
Q_CONSTINIT const QMetaObject QuestionWidget::staticMetaObject = { {
QMetaObject::SuperData::link<BaseWidget::staticMetaObject>(),
qt_meta_stringdata_CLASSQuestionWidgetENDCLASS.offsetsAndSizes,
qt_meta_data_CLASSQuestionWidgetENDCLASS,
qt_static_metacall,
nullptr,
qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSQuestionWidgetENDCLASS_t,
// Q_OBJECT / Q_GADGET
QtPrivate::TypeAndForceComplete<QuestionWidget, std::true_type>,
// method 'testCompleted'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
QtPrivate::TypeAndForceComplete<const TestResult &, std::false_type>,
// method 'onNextClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onSubmitClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>
>,
nullptr
} };
void QuestionWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<QuestionWidget *>(_o);
(void)_t;
switch (_id) {
case 0: _t->testCompleted((*reinterpret_cast< std::add_pointer_t<TestResult>>(_a[1]))); break;
case 1: _t->onNextClicked(); break;
case 2: _t->onSubmitClicked(); break;
default: ;
}
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
{
using _t = void (QuestionWidget::*)(const TestResult & );
if (_t _q_method = &QuestionWidget::testCompleted; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 0;
return;
}
}
}
}
const QMetaObject *QuestionWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *QuestionWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_CLASSQuestionWidgetENDCLASS.stringdata0))
return static_cast<void*>(this);
return BaseWidget::qt_metacast(_clname);
}
int QuestionWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = BaseWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 3)
qt_static_metacall(this, _c, _id, _a);
_id -= 3;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 3)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 3;
}
return _id;
}
// SIGNAL 0
void QuestionWidget::testCompleted(const TestResult & _t1)
{
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
}
QT_WARNING_POP

@ -1,185 +0,0 @@
/****************************************************************************
** Meta object code from reading C++ file 'result_widget.h'
**
** Created by: The Qt Meta Object Compiler version 68 (Qt 6.5.3)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../src/result_widget.h"
#include <QtGui/qtextcursor.h>
#include <QtCore/qmetatype.h>
#if __has_include(<QtCore/qtmochelpers.h>)
#include <QtCore/qtmochelpers.h>
#else
QT_BEGIN_MOC_NAMESPACE
#endif
#include <memory>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'result_widget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 68
#error "This file was generated using the moc from 6.5.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
#ifndef Q_CONSTINIT
#define Q_CONSTINIT
#endif
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_DISABLE_GCC("-Wuseless-cast")
namespace {
#ifdef QT_MOC_HAS_STRINGDATA
struct qt_meta_stringdata_CLASSResultWidgetENDCLASS_t {};
static constexpr auto qt_meta_stringdata_CLASSResultWidgetENDCLASS = QtMocHelpers::stringData(
"ResultWidget",
"restartTest",
"",
"exitTest"
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSResultWidgetENDCLASS_t {
uint offsetsAndSizes[8];
char stringdata0[13];
char stringdata1[12];
char stringdata2[1];
char stringdata3[9];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSResultWidgetENDCLASS_t::offsetsAndSizes) + ofs), len
Q_CONSTINIT static const qt_meta_stringdata_CLASSResultWidgetENDCLASS_t qt_meta_stringdata_CLASSResultWidgetENDCLASS = {
{
QT_MOC_LITERAL(0, 12), // "ResultWidget"
QT_MOC_LITERAL(13, 11), // "restartTest"
QT_MOC_LITERAL(25, 0), // ""
QT_MOC_LITERAL(26, 8) // "exitTest"
},
"ResultWidget",
"restartTest",
"",
"exitTest"
};
#undef QT_MOC_LITERAL
#endif // !QT_MOC_HAS_STRING_DATA
} // unnamed namespace
Q_CONSTINIT static const uint qt_meta_data_CLASSResultWidgetENDCLASS[] = {
// content:
11, // revision
0, // classname
0, 0, // classinfo
2, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
2, // signalCount
// signals: name, argc, parameters, tag, flags, initial metatype offsets
1, 0, 26, 2, 0x06, 1 /* Public */,
3, 0, 27, 2, 0x06, 2 /* Public */,
// signals: parameters
QMetaType::Void,
QMetaType::Void,
0 // eod
};
Q_CONSTINIT const QMetaObject ResultWidget::staticMetaObject = { {
QMetaObject::SuperData::link<BaseWidget::staticMetaObject>(),
qt_meta_stringdata_CLASSResultWidgetENDCLASS.offsetsAndSizes,
qt_meta_data_CLASSResultWidgetENDCLASS,
qt_static_metacall,
nullptr,
qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSResultWidgetENDCLASS_t,
// Q_OBJECT / Q_GADGET
QtPrivate::TypeAndForceComplete<ResultWidget, std::true_type>,
// method 'restartTest'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'exitTest'
QtPrivate::TypeAndForceComplete<void, std::false_type>
>,
nullptr
} };
void ResultWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<ResultWidget *>(_o);
(void)_t;
switch (_id) {
case 0: _t->restartTest(); break;
case 1: _t->exitTest(); break;
default: ;
}
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
{
using _t = void (ResultWidget::*)();
if (_t _q_method = &ResultWidget::restartTest; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 0;
return;
}
}
{
using _t = void (ResultWidget::*)();
if (_t _q_method = &ResultWidget::exitTest; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 1;
return;
}
}
}
(void)_a;
}
const QMetaObject *ResultWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *ResultWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_CLASSResultWidgetENDCLASS.stringdata0))
return static_cast<void*>(this);
return BaseWidget::qt_metacast(_clname);
}
int ResultWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = BaseWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 2)
qt_static_metacall(this, _c, _id, _a);
_id -= 2;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 2)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 2;
}
return _id;
}
// SIGNAL 0
void ResultWidget::restartTest()
{
QMetaObject::activate(this, &staticMetaObject, 0, nullptr);
}
// SIGNAL 1
void ResultWidget::exitTest()
{
QMetaObject::activate(this, &staticMetaObject, 1, nullptr);
}
QT_WARNING_POP

@ -1,213 +0,0 @@
/****************************************************************************
** Meta object code from reading C++ file 'selection_widget.h'
**
** Created by: The Qt Meta Object Compiler version 68 (Qt 6.5.3)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../src/selection_widget.h"
#include <QtGui/qtextcursor.h>
#include <QtCore/qmetatype.h>
#if __has_include(<QtCore/qtmochelpers.h>)
#include <QtCore/qtmochelpers.h>
#else
QT_BEGIN_MOC_NAMESPACE
#endif
#include <memory>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'selection_widget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 68
#error "This file was generated using the moc from 6.5.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
#ifndef Q_CONSTINIT
#define Q_CONSTINIT
#endif
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_DISABLE_GCC("-Wuseless-cast")
namespace {
#ifdef QT_MOC_HAS_STRINGDATA
struct qt_meta_stringdata_CLASSSelectionWidgetENDCLASS_t {};
static constexpr auto qt_meta_stringdata_CLASSSelectionWidgetENDCLASS = QtMocHelpers::stringData(
"SelectionWidget",
"startRequest",
"",
"difficulty",
"questionCount",
"onPrimaryClicked",
"onJuniorClicked",
"onSeniorClicked",
"onStartClicked"
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSSelectionWidgetENDCLASS_t {
uint offsetsAndSizes[18];
char stringdata0[16];
char stringdata1[13];
char stringdata2[1];
char stringdata3[11];
char stringdata4[14];
char stringdata5[17];
char stringdata6[16];
char stringdata7[16];
char stringdata8[15];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSSelectionWidgetENDCLASS_t::offsetsAndSizes) + ofs), len
Q_CONSTINIT static const qt_meta_stringdata_CLASSSelectionWidgetENDCLASS_t qt_meta_stringdata_CLASSSelectionWidgetENDCLASS = {
{
QT_MOC_LITERAL(0, 15), // "SelectionWidget"
QT_MOC_LITERAL(16, 12), // "startRequest"
QT_MOC_LITERAL(29, 0), // ""
QT_MOC_LITERAL(30, 10), // "difficulty"
QT_MOC_LITERAL(41, 13), // "questionCount"
QT_MOC_LITERAL(55, 16), // "onPrimaryClicked"
QT_MOC_LITERAL(72, 15), // "onJuniorClicked"
QT_MOC_LITERAL(88, 15), // "onSeniorClicked"
QT_MOC_LITERAL(104, 14) // "onStartClicked"
},
"SelectionWidget",
"startRequest",
"",
"difficulty",
"questionCount",
"onPrimaryClicked",
"onJuniorClicked",
"onSeniorClicked",
"onStartClicked"
};
#undef QT_MOC_LITERAL
#endif // !QT_MOC_HAS_STRING_DATA
} // unnamed namespace
Q_CONSTINIT static const uint qt_meta_data_CLASSSelectionWidgetENDCLASS[] = {
// content:
11, // revision
0, // classname
0, 0, // classinfo
5, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
1, // signalCount
// signals: name, argc, parameters, tag, flags, initial metatype offsets
1, 2, 44, 2, 0x06, 1 /* Public */,
// slots: name, argc, parameters, tag, flags, initial metatype offsets
5, 0, 49, 2, 0x08, 4 /* Private */,
6, 0, 50, 2, 0x08, 5 /* Private */,
7, 0, 51, 2, 0x08, 6 /* Private */,
8, 0, 52, 2, 0x08, 7 /* Private */,
// signals: parameters
QMetaType::Void, QMetaType::QString, QMetaType::Int, 3, 4,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
0 // eod
};
Q_CONSTINIT const QMetaObject SelectionWidget::staticMetaObject = { {
QMetaObject::SuperData::link<BaseWidget::staticMetaObject>(),
qt_meta_stringdata_CLASSSelectionWidgetENDCLASS.offsetsAndSizes,
qt_meta_data_CLASSSelectionWidgetENDCLASS,
qt_static_metacall,
nullptr,
qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSSelectionWidgetENDCLASS_t,
// Q_OBJECT / Q_GADGET
QtPrivate::TypeAndForceComplete<SelectionWidget, std::true_type>,
// method 'startRequest'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
QtPrivate::TypeAndForceComplete<const QString &, std::false_type>,
QtPrivate::TypeAndForceComplete<int, std::false_type>,
// method 'onPrimaryClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onJuniorClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onSeniorClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'onStartClicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>
>,
nullptr
} };
void SelectionWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<SelectionWidget *>(_o);
(void)_t;
switch (_id) {
case 0: _t->startRequest((*reinterpret_cast< std::add_pointer_t<QString>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<int>>(_a[2]))); break;
case 1: _t->onPrimaryClicked(); break;
case 2: _t->onJuniorClicked(); break;
case 3: _t->onSeniorClicked(); break;
case 4: _t->onStartClicked(); break;
default: ;
}
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
{
using _t = void (SelectionWidget::*)(const QString & , int );
if (_t _q_method = &SelectionWidget::startRequest; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 0;
return;
}
}
}
}
const QMetaObject *SelectionWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *SelectionWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_CLASSSelectionWidgetENDCLASS.stringdata0))
return static_cast<void*>(this);
return BaseWidget::qt_metacast(_clname);
}
int SelectionWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = BaseWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 5)
qt_static_metacall(this, _c, _id, _a);
_id -= 5;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 5)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 5;
}
return _id;
}
// SIGNAL 0
void SelectionWidget::startRequest(const QString & _t1, int _t2)
{
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
}
QT_WARNING_POP

@ -1,14 +0,0 @@
release/main.o
release/main_window.o
release/login_widget.o
release/selection_widget.o
release/question_widget.o
release/result_widget.o
release/base_widget.o
release/qrc_qmake_qmake_qm_files.o
release/moc_main_window.o
release/moc_login_widget.o
release/moc_selection_widget.o
release/moc_question_widget.o
release/moc_result_widget.o
release/moc_base_widget.o

@ -1,5 +0,0 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="i18n">
<file alias="examSystem_zh_CN.qm">E:/qt_project/examSystem/frontend/release/examSystem_zh_CN.qm</file>
</qresource>
</RCC>

@ -1,101 +0,0 @@
/****************************************************************************
** Resource object code
**
** Created by: The Resource Compiler for Qt version 6.5.3
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
static const unsigned char qt_resource_data[] = {
// E:/qt_project/examSystem/frontend/release/examSystem_zh_CN.qm
0x0,0x0,0x0,0x1a,
0x3c,
0xb8,0x64,0x18,0xca,0xef,0x9c,0x95,0xcd,0x21,0x1c,0xbf,0x60,0xa1,0xbd,0xdd,0xa7,
0x0,0x0,0x0,0x5,0x7a,0x68,0x5f,0x43,0x4e,
};
static const unsigned char qt_resource_name[] = {
// i18n
0x0,0x4,
0x0,0x6,0xc4,0xee,
0x0,0x69,
0x0,0x31,0x0,0x38,0x0,0x6e,
// examSystem_zh_CN.qm
0x0,0x13,
0xc,0xd0,0xd4,0x3d,
0x0,0x65,
0x0,0x78,0x0,0x61,0x0,0x6d,0x0,0x53,0x0,0x79,0x0,0x73,0x0,0x74,0x0,0x65,0x0,0x6d,0x0,0x5f,0x0,0x7a,0x0,0x68,0x0,0x5f,0x0,0x43,0x0,0x4e,0x0,0x2e,
0x0,0x71,0x0,0x6d,
};
static const unsigned char qt_resource_struct[] = {
// :
0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
// :/i18n
0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
// :/i18n/examSystem_zh_CN.qm
0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
0x0,0x0,0x1,0x99,0xc9,0xb7,0x79,0xfa,
};
#ifdef QT_NAMESPACE
# define QT_RCC_PREPEND_NAMESPACE(name) ::QT_NAMESPACE::name
# define QT_RCC_MANGLE_NAMESPACE0(x) x
# define QT_RCC_MANGLE_NAMESPACE1(a, b) a##_##b
# define QT_RCC_MANGLE_NAMESPACE2(a, b) QT_RCC_MANGLE_NAMESPACE1(a,b)
# define QT_RCC_MANGLE_NAMESPACE(name) QT_RCC_MANGLE_NAMESPACE2( \
QT_RCC_MANGLE_NAMESPACE0(name), QT_RCC_MANGLE_NAMESPACE0(QT_NAMESPACE))
#else
# define QT_RCC_PREPEND_NAMESPACE(name) name
# define QT_RCC_MANGLE_NAMESPACE(name) name
#endif
#ifdef QT_NAMESPACE
namespace QT_NAMESPACE {
#endif
bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *);
bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *);
#ifdef QT_NAMESPACE
}
#endif
int QT_RCC_MANGLE_NAMESPACE(qInitResources_qmake_qmake_qm_files)();
int QT_RCC_MANGLE_NAMESPACE(qInitResources_qmake_qmake_qm_files)()
{
int version = 3;
QT_RCC_PREPEND_NAMESPACE(qRegisterResourceData)
(version, qt_resource_struct, qt_resource_name, qt_resource_data);
return 1;
}
int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_qmake_qmake_qm_files)();
int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_qmake_qmake_qm_files)()
{
int version = 3;
QT_RCC_PREPEND_NAMESPACE(qUnregisterResourceData)
(version, qt_resource_struct, qt_resource_name, qt_resource_data);
return 1;
}
#ifdef __clang__
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wexit-time-destructors"
#endif
namespace {
struct initializer {
initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources_qmake_qmake_qm_files)(); }
~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources_qmake_qmake_qm_files)(); }
} dummy;
}
#ifdef __clang__
# pragma clang diagnostic pop
#endif

Binary file not shown.

@ -1,62 +0,0 @@
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 6.5.3
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralwidget;
QMenuBar *menubar;
QStatusBar *statusbar;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName("MainWindow");
MainWindow->resize(800, 600);
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName("centralwidget");
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
menubar->setObjectName("menubar");
menubar->setGeometry(QRect(0, 0, 800, 25));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName("statusbar");
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H

@ -414,7 +414,7 @@ GenerateResponse ExamSystem::GenerateProblems(const GenerateRequest& request) {
", 数量: " + std::to_string(request.count));
return response;
}
SwitchProblemType(request.username, request.difficulty);
// 获取用户生成器
ProblemGenerator* generator = GetUserGenerator(request.username);
if (!generator) {
@ -864,7 +864,7 @@ std::string ExamSystem::CalculateAnswer(const std::string& expression) {
// 替换√为sqrt
pos = 0;
while ((pos = expr.find("", pos)) != std::string::npos) {
expr.replace(pos, 1, "sqrt");
expr.replace(pos, 3, "sqrt");
}
try {

@ -343,7 +343,7 @@ class BaseProblemGenerator : public ProblemGenerator {
1,
static_cast<int>(std::sqrt(constants::kMaxOperandValue)))(generator);
int squared_value = base * base;
return "" + std::to_string(squared_value);
return "(" + std::to_string(squared_value)+ ")";
}
}

@ -197,30 +197,31 @@ void LoginWidget::onSendCodeClicked()
return;
}
// 如果已经在倒计时,直接返回
if (countdownTimer && countdownTimer->isActive()) {
showMessage("请等待倒计时结束");
return;
}
// // 如果已经在倒计时,直接返回
// if (countdownTimer && countdownTimer->isActive()) {
// showMessage("请等待倒计时结束");
// return;
// }
bool result = backend->SendVerificationCode(email.toStdString());
if(result){
showMessage("验证码已发送到您的邮箱,请查收");
} else{
showMessage("邮箱已被注册");
}
// 初始化或重置计时器
if (!countdownTimer) {
countdownTimer = new QTimer(this);
connect(countdownTimer, &QTimer::timeout, this, &LoginWidget::onCountdownTimeout);
showMessage("邮箱已被注册或者输入邮箱有误");
}
// 开始倒计时
sendCodeBtn->setEnabled(false);
countdown_seconds_ = 60;
sendCodeBtn->setText(QString("%1秒后重发").arg(countdown_seconds_));
countdownTimer->start(1000);
// // 初始化或重置计时器
// if (!countdownTimer) {
// countdownTimer = new QTimer(this);
// connect(countdownTimer, &QTimer::timeout, this, &LoginWidget::onCountdownTimeout);
// }
// // 开始倒计时
// sendCodeBtn->setEnabled(false);
// countdown_seconds_ = 60;
// sendCodeBtn->setText(QString("%1秒后重发").arg(countdown_seconds_));
// countdownTimer->start(1000);
}

@ -43,6 +43,7 @@ void MainWindow::showSelection(const QString& userName) {
}
void MainWindow::showQuestions(const QString& difficulty, int count) {
questionWidget->clearAnswers();
questionWidget->startTest(difficulty, count);
stackedWidget->setCurrentWidget(questionWidget);
}

@ -17,6 +17,7 @@ class QuestionWidget : public BaseWidget {
public:
explicit QuestionWidget(exam_system::BackendInterface* backend, QWidget* parent = nullptr);
void startTest(const QString& difficulty, int questionCount);
void clearAnswers(){ user_answers_.clear(); }
signals:
void testCompleted(const exam_system::TestResult& result);

@ -40,9 +40,13 @@ void ResultWidget::setupUI() {
void ResultWidget::showResult(const exam_system::TestResult& result) {
scoreLabel->setText(QString::number(result.score, 'f', 1) + "");
QString detail = QString("难度: %1\n正确题目: %2/%3")
.arg(QString::fromStdString(result.difficulty))
double correct_rate = (result.total_questions > 0)
? (static_cast<double>(result.correct_answers) / result.total_questions) * 100.0
: 0.0;
QString detail = QString("正确题目: %1/%2\n正确率: %3%")
.arg(result.correct_answers)
.arg(result.total_questions);
.arg(result.total_questions)
.arg(correct_rate, 0, 'f', 1); // 保留1位小数
detailLabel->setText(detail);
}

@ -1,8 +1,11 @@
#include <QApplication>
// #include <windows.h>
#include "../frontend/main_window.h"
#include "../shared/backend_interface.h"
int main(int argc, char *argv[]) {
// SetConsoleOutputCP(CP_UTF8); // 输出编码设定
// SetConsoleCP(CP_UTF8); // 输入编码设定
QApplication app(argc, argv);
std::unique_ptr<exam_system::BackendInterface> backend = std::make_unique<exam_system::BackendImpl>();

@ -1,21 +1,12 @@
#include "backend_interface.h"
#include <iostream>
#include <random>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <stack>
#include <iostream>
#include <chrono>
#include<QByteArray>
#include<QString>
#include<QTcpSocket>
#include <QSslSocket>
#include <QDebug>
#include <QDateTime>
#include <QSslConfiguration>
#include <QSslCertificate>
#include <QSslKey>
// #include <uuid/uuid.h> // 如果需要生成UUID
namespace exam_system {
@ -38,60 +29,24 @@ BackendImpl::BackendImpl() {
// 初始化 ExamSystem
exam_system_ = std::make_unique<ExamSystem>();
// 配置邮箱设置 - 使用qq邮箱
email_config_.smtp_server = "smtp.qq.com";
email_config_.smtp_port = 465; // 使用SSL端口
email_config_.username = "3315384591@qq.com"; // 替换为真实邮箱
email_config_.password = "jobgsqxruxtgdaig"; // 替换为真实授权码
email_config_.username = "3315384591@qq.com";
email_config_.password = "jobgsqxruxtgdaig";
email_config_.use_curl = true;
email_config_.skip_peer_verification = true;
email_config_.skip_hostname_verification = true;
// 初始化libcurl
// // 初始化libcurl
// curl_global_init(CURL_GLOBAL_DEFAULT);
Logger::Log(Logger::Level::INFO, "BackendImpl初始化完成");
}
BackendImpl::~BackendImpl() {
// curl_global_cleanup();
}
// BackendImpl::~BackendImpl() {
// curl_global_cleanup();
// }
bool BackendImpl::SendVerificationCode(const std::string& email) {
if (email.empty() || email.find('@') == std::string::npos) {
Logger::Log(Logger::Level::WARNING, "邮箱地址格式无效: " + email);
return false;
}
// 清理过期的验证码
CleanExpiredVerificationCodes();
// 生成验证码
std::string code = GenerateVerificationCode();
// 保存验证码
VerificationCode vc;
vc.code = code;
vc.generate_time = std::time(nullptr);
vc.email = email;
verification_codes_[email] = vc;
// 发送邮件
std::string subject = "数学考试系统 - 验证码";
std::string body = "您的验证码是: " + code + "\r\n\r\n";
body += "该验证码有效期为5分钟请尽快使用。\r\n";
body += "如果不是您本人操作,请忽略此邮件。\r\n\r\n";
body += "数学考试系统团队";
bool send_success = SendEmail(email, subject, body);
if (send_success) {
Logger::Log(Logger::Level::INFO,
"验证码发送成功至: " + email + ", 验证码: " + code);
return true;
} else {
Logger::Log(Logger::Level::ERROR, "验证码发送失败: " + email);
verification_codes_.erase(email);
return false;
}
}
bool waitForResponse(QSslSocket* socket) {
if (!socket->waitForReadyRead(15000)) { // 增加超时时间到15秒
@ -316,44 +271,59 @@ QString BackendImpl::BuildEmailPayload(const std::string& recipient,
return payload;
}
// 生成消息ID
std::string BackendImpl::GenerateMessageId() {
auto now = std::chrono::system_clock::now();
auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(
now.time_since_epoch()).count();
bool BackendImpl::SendVerificationCode(const std::string& email) {
if (email.empty() || email.find('@') == std::string::npos) {
// Logger::Log(Logger::Level::ERROR, "邮箱地址格式无效: " + email);
return false;
}
// 清理过期的验证码
CleanExpiredVerificationCodes();
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dis(1000, 9999);
// 生成验证码
std::string code = GenerateVerificationCode();
return "math_exam_" + std::to_string(timestamp) + "_" + std::to_string(dis(gen));
}
// 获取当前日期时间字符串
std::string BackendImpl::GetCurrentDateTime() {
std::time_t now = std::time(nullptr);
std::tm* tm_info = std::localtime(&now);
// 保存验证码
VerificationCode vc;
vc.code = code;
vc.generate_time = std::time(nullptr);
vc.email = email;
verification_codes_[email] = vc;
// 发送邮件
std::string subject = "数学考试系统 - 验证码";
std::string body = "您的验证码是: " + code + "\r\n\r\n";
body += "该验证码有效期为5分钟请尽快使用。\r\n";
body += "如果不是您本人操作,请忽略此邮件。\r\n\r\n";
body += "数学考试系统团队";
char buffer[80];
std::strftime(buffer, sizeof(buffer), "%a, %d %b %Y %H:%M:%S %z", tm_info);
bool send_success = SendEmail(email, subject, body);
return std::string(buffer);
if (send_success) {
Logger::Log(Logger::Level::INFO,
"验证码发送成功至: " + email + ", 验证码: " + code);
return true;
} else {
// Logger::Log(Logger::Level::ERROR, "验证码发送失败: " + email);
verification_codes_.erase(email);
return false;
}
}
bool BackendImpl::UserRegister(const std::string& username,
const std::string& password,
const std::string& email,
const std::string& code) {
// 输入验证
if (username.empty() || password.empty() || email.empty() || code.empty()) {
Logger::Log(Logger::Level::ERROR, "注册信息不完整");
// Logger::Log(Logger::Level::ERROR, "注册信息不完整");
return false;
}
// 验证邮箱验证码
if (!ValidateVerificationCode(email, code)) {
Logger::Log(Logger::Level::ERROR, "验证码错误或已过期");
// Logger::Log(Logger::Level::ERROR, "验证码错误或已过期");
return false;
}
@ -372,7 +342,7 @@ bool BackendImpl::UserRegister(const std::string& username,
Logger::Log(Logger::Level::INFO,
"用户注册成功: " + username + ", 邮箱: " + email);
} else {
Logger::Log(Logger::Level::ERROR, "用户注册失败: " + username);
// Logger::Log(Logger::Level::ERROR, "用户注册失败: " + username);
}
return success;
@ -381,7 +351,7 @@ bool BackendImpl::UserRegister(const std::string& username,
bool BackendImpl::UserLogin(const std::string& username,
const std::string& password) {
if (username.empty() || password.empty()) {
Logger::Log(Logger::Level::ERROR, "用户名或密码为空");
// Logger::Log(Logger::Level::ERROR, "用户名或密码为空");
return false;
}
@ -397,8 +367,8 @@ bool BackendImpl::UserLogin(const std::string& username,
Logger::Log(Logger::Level::INFO, "用户登录成功: " + username);
return true;
} else {
Logger::Log(Logger::Level::ERROR,
"用户登录失败: " + username + ", 错误: " + response.error_message);
// Logger::Log(Logger::Level::ERROR,
// "用户登录失败: " + username + ", 错误: " + response.error_message);
return false;
}
}
@ -416,12 +386,12 @@ void BackendImpl::UserLogout() {
bool BackendImpl::ChangePassword(const std::string& old_password,
const std::string& new_password) {
if (current_user_.empty()) {
Logger::Log(Logger::Level::ERROR, "用户未登录,无法修改密码");
// Logger::Log(Logger::Level::ERROR, "用户未登录,无法修改密码");
return false;
}
if (new_password.empty()) {
Logger::Log(Logger::Level::ERROR, "新密码不能为空");
// Logger::Log(Logger::Level::ERROR, "新密码不能为空");
return false;
}
@ -437,8 +407,8 @@ bool BackendImpl::ChangePassword(const std::string& old_password,
Logger::Log(Logger::Level::INFO, "密码修改成功: " + current_user_);
return true;
} else {
Logger::Log(Logger::Level::ERROR,
"密码修改失败: " + current_user_ + ", 错误: " + response.error_message);
// Logger::Log(Logger::Level::ERROR,
// "密码修改失败: " + current_user_ + ", 错误: " + response.error_message);
return false;
}
}
@ -457,7 +427,7 @@ std::vector<QuestionInfo> BackendImpl::GenerateQuestions(
{"senior", "高中"}
};
if (current_user_.empty()) {
Logger::Log(Logger::Level::ERROR, "用户未登录,无法生成题目");
// Logger::Log(Logger::Level::ERROR, "用户未登录,无法生成题目");
return questions;
}
@ -470,8 +440,8 @@ std::vector<QuestionInfo> BackendImpl::GenerateQuestions(
GenerateResponse response = exam_system_->GenerateProblems(request);
if (!response.success) {
Logger::Log(Logger::Level::ERROR,
"生成题目失败: " + response.error_message);
// Logger::Log(Logger::Level::ERROR,
// "生成题目失败: " + response.error_message);
return questions;
}
@ -530,14 +500,14 @@ exam_system::TestResult BackendImpl::SubmitAnswers(const std::vector<int>& user_
result.difficulty = "unknown";
if (current_user_.empty()) {
Logger::Log(Logger::Level::ERROR, "用户未登录,无法提交答案");
// Logger::Log(Logger::Level::ERROR, "用户未登录,无法提交答案");
return result;
}
// 获取用户当前题目
auto it = user_questions_.find(current_user_);
if (it == user_questions_.end()) {
Logger::Log(Logger::Level::ERROR, "用户没有生成的题目");
// Logger::Log(Logger::Level::ERROR, "用户没有生成的题目");
return result;
}
@ -545,10 +515,10 @@ exam_system::TestResult BackendImpl::SubmitAnswers(const std::vector<int>& user_
result.total_questions = questions.size();
if (user_answers.size() != questions.size()) {
Logger::Log(Logger::Level::ERROR,
"答案数量与题目数量不匹配: " +
std::to_string(user_answers.size()) + " vs " +
std::to_string(questions.size()));
// Logger::Log(Logger::Level::ERROR,
// "答案数量与题目数量不匹配: " +
// std::to_string(user_answers.size()) + " vs " +
// std::to_string(questions.size()));
return result;
}
@ -632,7 +602,7 @@ void BackendImpl::CleanExpiredVerificationCodes() {
for (const auto& email : expired_emails) {
verification_codes_.erase(email);
Logger::Log(Logger::Level::WARNING, "清理过期验证码: " + email);
Logger::Log(Logger::Level::INFO, "清理过期验证码: " + email);
}
}
@ -691,4 +661,4 @@ double BackendImpl::CalculateScore(int correct_count, int total_count) {
return (static_cast<double>(correct_count) / total_count) * 100.0;
}
} // namespace exam_system
} // namespace exam_system

@ -6,8 +6,16 @@
#include <memory>
#include <map>
#include <ctime>
#include<QByteArray>
#include<QString>
#include<QTcpSocket>
#include <QSslSocket>
#include <QDebug>
#include <QDateTime>
#include <QSslConfiguration>
#include <QSslCertificate>
#include <QSslKey>
#include "../backend/exam_system/exam_system.h"
#include <QString>
namespace exam_system {
@ -40,6 +48,18 @@ struct EmailConfig {
int smtp_port = 465; // 默认使用465端口
std::string username = "3315384591@qq.com";
std::string password = "jobgsqxruxtgdaig";
bool use_curl = true;
bool skip_peer_verification = false; // 新增:跳过证书验证
bool skip_hostname_verification = false; // 新增:跳过主机名验证
};
// 邮件上传状态结构体
struct EmailUploadStatus {
const std::vector<std::string>* payload_text;
size_t lines_read;
EmailUploadStatus(const std::vector<std::string>* text)
: payload_text(text), lines_read(0) {}
};
// 前后端通信接口
@ -67,7 +87,7 @@ class BackendInterface {
class BackendImpl : public BackendInterface {
public:
BackendImpl();
~BackendImpl() override;
~BackendImpl() override = default;
BackendImpl(const BackendImpl&) = delete;
BackendImpl& operator=(const BackendImpl&) = delete;
@ -97,8 +117,8 @@ class BackendImpl : public BackendInterface {
const std::string& subject,
const std::string& body);
// 邮件内容生成
QString BuildEmailPayload(const std::string& recipient,const std::string& subject,const std::string& body);
// 邮件内容生成
QString BuildEmailPayload(const std::string& recipient,const std::string& subject,const std::string& body);
std::string GenerateMessageId();
std::string GetCurrentDateTime();
@ -128,4 +148,4 @@ class BackendImpl : public BackendInterface {
} // namespace exam_system
#endif // BACKEND_INTERFACE_H
#endif // BACKEND_INTERFACE_H

@ -2,12 +2,4 @@
# 用户类型: 小学, 初中, 高中
# 自动生成 - 请勿手动编辑
zhangsan1,Erp91637,小学,zhangsan1@example.com
zhangsan2,123,小学,zhangsan2@example.com
zhangsan3,123,小学,zhangsan3@example.com
lisi1,123,初中,lisi1@example.com
lisi2,123,初中,lisi2@example.com
lisi3,123,初中,lisi3@example.com
wangwu1,123,高中,wangwu1@example.com
wangwu2,123,高中,wangwu2@example.com
wangwu3,123,高中,wangwu3@example.com
zhangsan1,abc123,小学,zhangsan1@example.com

1 # 用户数据文件格式: username,password,user_type,email
2 # 用户类型: 小学, 初中, 高中
3 # 自动生成 - 请勿手动编辑
4 zhangsan1,Erp91637,小学,zhangsan1@example.com zhangsan1,abc123,小学,zhangsan1@example.com
5
zhangsan3,123,小学,zhangsan3@example.com
lisi1,123,初中,lisi1@example.com
lisi2,123,初中,lisi2@example.com
lisi3,123,初中,lisi3@example.com
wangwu1,123,高中,wangwu1@example.com
wangwu2,123,高中,wangwu2@example.com
wangwu3,123,高中,wangwu3@example.com

@ -1,19 +0,0 @@
1. 21 * 13 + 54 / 98
2. 44 - 6
3. 73 + 90 * 73 / 36 - 23
4. 28 / 39 * 46
5. 92 * 55
6. 32 / 50
7. 73 * 74 + 71 / 73
8. 90 * 28 + 14 - 78 - 5
9. 2 / 57
10. 95 + 99 * 85 / 92 - 33

@ -1,19 +0,0 @@
1. 68 - 43 / 84 / 9 + 9
2. 15 / 92 / 46 * 60 * 88
3. 78 - 62 + 89 / 49
4. 61 * 93 / 1
5. 51 * 3 * 18
6. 57 + 62 - 12 / 82
7. 2 / 6 + 73 - 25
8. 99 - 68 / 45 - 10 + 46
9. 66 + 72 * 92 / 85
10. 20 / 9 * 35
Loading…
Cancel
Save