DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DASignalBlockers.hpp
1#ifndef DASIGNALBLOCKERS_H
2#define DASIGNALBLOCKERS_H
3#include <vector>
4#include <QObject>
5#include <QSignalBlocker>
6namespace DA
7{
21{
22public:
23 // 使用可变参数模板构造函数
24 template< typename... Args >
25 explicit DASignalBlockers(Args*... objects)
26 {
27 addObjects(objects...);
28 }
29
30 // 禁止拷贝和赋值
31 DASignalBlockers(const DASignalBlockers&) = delete;
32 DASignalBlockers& operator=(const DASignalBlockers&) = delete;
33
34 // 移动构造函数
36
37 // 移动赋值运算符
38 DASignalBlockers& operator=(DASignalBlockers&&) = default;
39
40private:
41 std::vector< QSignalBlocker > blockers; // 直接在栈上存储 QSignalBlocker
42
43 // 辅助函数:递归添加 QObject 到 blockers
44 template< typename First, typename... Rest >
45 void addObjects(First* first, Rest*... rest)
46 {
47 if (first) {
48 blockers.emplace_back(*first); // 在栈上创建 QSignalBlocker
49 }
50 if constexpr (sizeof...(rest) > 0) { // 如果还有剩余参数
51 addObjects(rest...);
52 }
53 }
54};
55}
56#endif // DASIGNALBLOCKERS_H
支持多个变量执行类似QSingalBlocker的操作
Definition DASignalBlockers.hpp:21
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44