You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Software_Architecture/.promptx/resource/domain/qt-code-optimizer/knowledge/qt-cpp-expertise.knowledge.md

191 lines
4.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Qt C++ 专业知识体系
## Qt框架核心技术
### 信号槽机制优化
- **连接方式选择**:自动连接 vs 手动连接 vs 队列连接
- **生命周期管理**:避免悬空指针和内存泄漏
- **性能优化**:减少不必要的信号发射和槽调用
- **线程安全**:跨线程信号槽的正确使用
### UI架构设计
- **MVC/MVP模式**在Qt中的正确实现
- **组件化设计**可复用UI组件的设计原则
- **布局管理**:灵活的布局系统使用
- **样式系统**QSS样式表的高效使用
### 资源管理
- **内存管理**Qt对象树和智能指针的使用
- **文件资源**.qrc资源文件的优化管理
- **国际化支持**:多语言支持的实现
- **平台适配**:跨平台资源管理策略
## C++17现代特性应用
### 智能指针使用
```cpp
// 推荐的智能指针使用模式
std::unique_ptr<QWidget> createWidget();
std::shared_ptr<DataModel> getSharedModel();
std::weak_ptr<Observer> registerObserver();
```
### RAII原则应用
```cpp
// 资源获取即初始化
class DatabaseConnection {
public:
DatabaseConnection(const QString& connectionString);
~DatabaseConnection(); // 自动清理资源
private:
QSqlDatabase db;
};
```
### 现代C++语法
- **auto关键字**:类型推导的合理使用
- **范围for循环**:容器遍历的现代写法
- **lambda表达式**:回调函数的简洁实现
- **移动语义**:性能优化的重要手段
## 设计模式在Qt中的应用
### 观察者模式
```cpp
// Qt信号槽机制本身就是观察者模式的实现
class Subject : public QObject {
Q_OBJECT
signals:
void dataChanged(const Data& data);
};
class Observer : public QObject {
Q_OBJECT
public slots:
void onDataChanged(const Data& data);
};
```
### 单例模式
```cpp
// 线程安全的单例实现
class ConfigManager {
public:
static ConfigManager& instance() {
static ConfigManager instance;
return instance;
}
private:
ConfigManager() = default;
ConfigManager(const ConfigManager&) = delete;
ConfigManager& operator=(const ConfigManager&) = delete;
};
```
### 工厂模式
```cpp
// 抽象工厂模式用于创建UI组件
class WidgetFactory {
public:
virtual std::unique_ptr<QWidget> createButton() = 0;
virtual std::unique_ptr<QWidget> createLabel() = 0;
};
```
### 命令模式
```cpp
// 用于实现撤销/重做功能
class Command {
public:
virtual ~Command() = default;
virtual void execute() = 0;
virtual void undo() = 0;
};
```
## Qt项目架构最佳实践
### 目录结构标准
```
project/
├── src/
│ ├── core/ # 核心业务逻辑
│ ├── ui/ # 用户界面
│ ├── utils/ # 工具类
│ └── main.cpp
├── include/ # 头文件
├── resources/ # 资源文件
├── tests/ # 测试代码
├── docs/ # 文档
└── CMakeLists.txt # 构建配置
```
### 模块化设计原则
- **高内聚低耦合**:模块内部紧密相关,模块间松散耦合
- **接口隔离**:定义清晰的模块接口
- **依赖倒置**:依赖抽象而非具体实现
- **单一职责**:每个类只负责一个职责
### 错误处理策略
```cpp
// 异常安全的错误处理
class FileProcessor {
public:
enum class Result {
Success,
FileNotFound,
PermissionDenied,
InvalidFormat
};
Result processFile(const QString& filename);
};
```
## 性能优化技术
### 内存优化
- **对象池模式**:减少频繁的内存分配
- **延迟初始化**:按需创建对象
- **内存映射**:大文件的高效处理
- **缓存策略**:合理的数据缓存机制
### 渲染优化
- **双缓冲技术**:避免界面闪烁
- **脏矩形更新**:只更新变化的区域
- **图像缓存**:避免重复的图像处理
- **硬件加速**利用GPU加速渲染
### 多线程优化
```cpp
// Qt并发框架的使用
QFuture<QList<Result>> future = QtConcurrent::mapped(
data,
[](const Input& input) { return processInput(input); }
);
```
## 测试和质量保证
### 单元测试框架
```cpp
// Qt Test框架的使用
class TestMyClass : public QObject {
Q_OBJECT
private slots:
void testFunction();
void testFunction_data();
};
```
### 静态分析工具
- **cppcheck**C++静态分析
- **clang-static-analyzer**LLVM静态分析
- **Qt Creator**:内置的静态分析功能
- **SonarQube**:代码质量管理平台
### 代码覆盖率
- **gcov/lcov**GCC代码覆盖率工具
- **Qt Test Coverage**Qt专用覆盖率分析
- **集成CI/CD**:持续集成中的质量检查