DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DA::DADataManager类 参考

DAData的数据管理类,实现数据操作的一些通知例如数据添加、删除、改名、内容改变等等 更多...

#include <DADataManager.h>

类 DA::DADataManager 继承关系图:

class  PrivateData
 

Public 类型

enum  ChangeType { ChangeName , ChangeDescribe , ChangeValue , ChangeDataframeColumnName }
 改变类型 更多...
 

Public 槽

void clear ()
 清除数据
 

信号

void dataAdded (const DA::DAData &d)
 有数据添加发射的信号
 
void dataBeginRemove (const DA::DAData &d, int dataIndex)
 数据准备删除
 
void dataRemoved (const DA::DAData &d, int dataOldIndex)
 数据删除发射的信号
 
void dataChanged (const DA::DAData &d, DA::DADataManager::ChangeType t)
 数据信息改变
 
void datasCleared ()
 数据被清除信号
 

Public 成员函数

 DADataManager (QObject *par=nullptr)
 
void addData (DAData &d)
 添加数据
 
void addData_ (DAData &d)
 带redo/undo的添加数据
 
DAData addData (const DAAbstractData::Pointer &d)
 添加数据
 
DAData addData_ (const DAAbstractData::Pointer &d)
 带redo/undo的添加数据
 
void addDatas_ (const QList< DAData > &datas)
 批量添加数据
 
void removeData (DAData &d)
 移除数据
 
void removeData_ (DAData &d)
 带redo/undo的移除数据
 
void removeDatas_ (const QList< DAData > &datas)
 批量移除数据
 
int getDataCount () const
 获取变量管理器管理的数据数量
 
int getDataIndex (const DAData &d) const
 参数在变量管理器的索引
 
DAData getData (int index) const
 根据索引获取对应的值
 
DAData findData (const QString &name, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
 精确查找数据
 
QList< DADatafindDatas (const QString &pattern, Qt::CaseSensitivity cs=Qt::CaseInsensitive) const
 使用通配符或普通字符串查找匹配的数据
 
QList< DADatafindDatasReg (const QRegularExpression &regex) const
 使用正则表达式查找匹配的数据
 
QList< DADatagetAllDatas () const
 获取所有数据
 
DAData getDataById (DAData::IdType id) const
 根据id获取数据
 
bool isDirty () const
 判断是否dirty,数据的改变和添加都会把此flag标记为true
 
void setDirtyFlag (bool on)
 设置脏标记
 
QUndoStack * getUndoStack () const
 获取undo stack
 
void notifyDataChangedSignal (const DAData &d, ChangeType t)
 触发DataChanged信号
 

静态 Public 成员函数

static QRegularExpression wildcardToRegex (const QString &pattern, Qt::CaseSensitivity cs)
 

Protected 成员函数

virtual void setUniqueDataName (DAData &d) const
 
QSet< QString > getDatasNameSet () const
 把所有管理的变量的名字按照set返回
 
void doRemoveData (DAData &d)
 移除数据
 

友元

class DAData
 

详细描述

DAData的数据管理类,实现数据操作的一些通知例如数据添加、删除、改名、内容改变等等

通过此类可以有效的管理DAData数据

注解
注意,后缀带_的方法是支持redo/undo的,如removeData是不带redo/undo,removeData_是带redo/undo

成员枚举类型说明

◆ ChangeType

改变类型

枚举值
ChangeName 

改变了名字

ChangeDescribe 

改变了描述

ChangeValue 

改变了值

ChangeDataframeColumnName 

针对dataframe,改变了列名

成员函数说明

◆ addData() [1/2]

DAData DA::DADataManager::addData ( const DAAbstractData::Pointer &  d)

添加数据

参数
d
返回
返回数据DAData

◆ addData() [2/2]

void DA::DADataManager::addData ( DAData d)

添加数据

注解
此函数会发生信号
参见
dataAdded
参数
d

◆ addData_() [1/2]

DAData DA::DADataManager::addData_ ( const DAAbstractData::Pointer &  d)

带redo/undo的添加数据

参数
d
返回
返回数据DAData

◆ addData_() [2/2]

void DA::DADataManager::addData_ ( DAData d)

带redo/undo的添加数据

注解
此函数会发生信号
参见
dataBeginAdd 和
dataEndAdded
参数
d

◆ addDatas_()

void DA::DADataManager::addDatas_ ( const QList< DAData > &  datas)

批量添加数据

等同多次调用addData_,会发射多次信号

参数
d

◆ dataAdded

void DA::DADataManager::dataAdded ( const DA::DAData d)
signal

有数据添加发射的信号

参数
d

◆ dataBeginRemove

void DA::DADataManager::dataBeginRemove ( const DA::DAData d,
int  dataIndex 
)
signal

数据准备删除

参数
d
dataIndex

◆ dataChanged

void DA::DADataManager::dataChanged ( const DA::DAData d,
DA::DADataManager::ChangeType  t 
)
signal

数据信息改变

参数
d数据
oldname

◆ dataRemoved

void DA::DADataManager::dataRemoved ( const DA::DAData d,
int  dataOldIndex 
)
signal

数据删除发射的信号

参数
d
dataOldIndex数据原来的索引

◆ doRemoveData()

void DA::DADataManager::doRemoveData ( DAData d)
protected

移除数据

参数
d

◆ findData()

DAData DA::DADataManager::findData ( const QString &  name,
Qt::CaseSensitivity  cs = Qt::CaseSensitive 
) const

精确查找数据

参数
name
返回

◆ findDatas()

QList< DAData > DA::DADataManager::findDatas ( const QString &  pattern,
Qt::CaseSensitivity  cs = Qt::CaseInsensitive 
) const

使用通配符或普通字符串查找匹配的数据

参数
pattern查找模式,可以是以下形式:
  • 通配符模式:使用*和?作为通配符,*匹配任意多个字符,?匹配单个字符
  • 普通字符串:不包含通配符时进行包含匹配
  • 特殊字符会被自动转义,确保安全匹配
cs大小写敏感设置,默认为不区分大小写
返回
返回匹配的DAData列表,如果没有找到匹配项,返回空列表

此函数为普通用户设计,提供了简单直观的查找方式。它会自动将通配符转换为正则表达式, 并对普通字符串进行安全转义处理。对于简单查找,这是最推荐的使用方式。

注解
  • 通配符转换规则:* → .*(匹配任意多个字符),? → .(匹配单个字符)
  • 特殊字符(如.、+、*等)在非通配符模式下会被自动转义
  • 性能说明:对于大量数据,通配符查找会有一定性能开销,建议缓存结果
警告
  • 如果pattern为空字符串,将返回空列表
  • 复杂匹配建议使用正则表达式版本以获得更好的性能和控制力
// 示例1:查找所有内机数据(通配符模式)
DADataManager* mgr = getDataManager();
QList<DAData> indoorData = mgr->findDatas("*indoor*");
// 这将匹配:391117_indoor_1, 391117_indoor_2, indoor_sensor等
// 示例2:查找特定编号的内机
QList<DAData> indoor1Data = mgr->findDatas("*indoor_1");
// 这将匹配:391117_indoor_1, system_indoor_1, indoor_1等
// 示例3:查找模块数据(不区分大小写)
QList<DAData> moduleData = mgr->findDatas("*module*");
// 这将匹配:module_001, MODULE_A, system_module等
// 示例4:查找系统数据(区分大小写)
QList<DAData> systemData = mgr->findDatas("System_*", Qt::CaseSensitive);
// 这将匹配:System_001,但不会匹配system_001
// 示例5:使用问号通配符
QList<DAData> sensorData = mgr->findDatas("sensor_?");
// 这将匹配:sensor_1, sensor_A,但不会匹配sensor_12
// 示例6:普通字符串查找(包含匹配)
QList<DAData> tempData = mgr->findDatas("temp");
// 这将匹配:temperature, temp_sensor, system_temp等
// 示例7:查找精确名称(结合通配符)
QList<DAData> exactData = mgr->findDatas("391117_indoor_1");
// 这将只匹配完全相同的名称
// 示例8:查找多个数据并处理结果
QList<DAData> results = mgr->findDatas("*indoor*");
for (const DAData& data : results) {
if (data.isDataFrame()) {
qDebug() << "找到内机数据:" << data.getName();
// 进一步处理数据...
}
}
DAData的数据管理类,实现数据操作的一些通知例如数据添加、删除、改名、内容改变等等
Definition DADataManager.h:18
QList< DAData > findDatas(const QString &pattern, Qt::CaseSensitivity cs=Qt::CaseInsensitive) const
使用通配符或普通字符串查找匹配的数据
Definition DADataManager.cpp:274
DAAbstractData的封装 可以放入QMap,QHash中,DAData的等于操作相当于创建一个引用
Definition DAData.h:25
参见
findDatas(const QRegularExpression&)
findData

◆ findDatasReg()

QList< DAData > DA::DADataManager::findDatasReg ( const QRegularExpression &  regex) const

使用正则表达式查找匹配的数据

参数
regex正则表达式对象,用于复杂模式匹配
返回
返回匹配的DAData列表,如果没有找到匹配项,返回空列表

此函数为高级用户设计,提供完整的正则表达式匹配能力。适合需要复杂匹配模式、 精确控制匹配规则或需要更高性能的场景。正则表达式提供了强大的模式匹配功能, 可以处理通配符无法表达的复杂逻辑。

注解
  • 传入的QRegularExpression必须是有效的,无效的正则表达式会返回空列表并输出警告
  • 此函数性能通常比通配符版本更好,因为避免了模式转换开销
  • 对于简单匹配,建议使用通配符版本以获得更好的可读性
警告
  • 复杂的正则表达式可能影响性能,特别是当数据量很大时
  • 确保正则表达式的正确性,错误的模式可能导致意外结果
  • 建议对复杂的正则表达式进行预编译以获得更好的性能
// 示例1:查找所有内机数据(正则表达式版本)
DADataManager* mgr = getDataManager();
QRegularExpression regex1(".*indoor.*", QRegularExpression::CaseInsensitiveOption);
QList<DAData> indoorData = mgr->findDatas(regex1);
// 示例2:查找特定范围内的编号
QRegularExpression regex2(".*indoor_[1-3]"); // 匹配indoor_1, indoor_2, indoor_3
QList<DAData> specificIndoorData = mgr->findDatas(regex2);
// 示例3:精确匹配特定格式
QRegularExpression regex3("^391117_indoor_\\d+$"); // 匹配391117_indoor_后跟数字
QList<DAData> exactFormatData = mgr->findDatas(regex3);
// 示例4:使用预编译的正则表达式提高性能
static QRegularExpression precompiledRegex(".*module.*",
QRegularExpression::CaseInsensitiveOption);
precompiledRegex.optimize(); // 优化性能
QList<DAData> moduleData = mgr->findDatas(precompiledRegex);
// 示例5:复杂匹配 - 查找温度或湿度传感器
QRegularExpression complexRegex(".*(temp|humidity).*",
QRegularExpression::CaseInsensitiveOption);
QList<DAData> sensorData = mgr->findDatas(complexRegex);
// 示例6:匹配数字编号的内机(更精确)
QRegularExpression numberedRegex(".*indoor_\\d{2,3}"); // 匹配2-3位数字编号
QList<DAData> numberedIndoorData = mgr->findDatas(numberedRegex);
// 示例7:排除特定模式
QRegularExpression excludeRegex(".*(?<!test)_indoor.*"); // 匹配不以test结尾的前缀
QList<DAData> excludeTestData = mgr->findDatas(excludeRegex);
// 示例8:处理正则表达式错误
QRegularExpression invalidRegex("[invalid"); // 无效的正则表达式
if (invalidRegex.isValid()) {
QList<DAData> data = mgr->findDatas(invalidRegex);
} else {
qWarning() << "正则表达式无效:" << invalidRegex.errorString();
}
// 示例9:批量处理多个正则表达式
QList<QRegularExpression> regexList = {
QRegularExpression(".*indoor.*"),
QRegularExpression(".*module.*"),
QRegularExpression(".*system.*")
};
for (const QRegularExpression& regex : regexList) {
QList<DAData> matches = mgr->findDatas(regex);
qDebug() << "模式" << regex.pattern() << "找到" << matches.size() << "个匹配";
}
参见
findDatas(const QString&, Qt::CaseSensitivity)

◆ getAllDatas()

QList< DAData > DA::DADataManager::getAllDatas ( ) const

获取所有数据

返回

◆ getData()

DAData DA::DADataManager::getData ( int  index) const

根据索引获取对应的值

参数
index
返回

◆ getDataById()

DAData DA::DADataManager::getDataById ( DAData::IdType  id) const

根据id获取数据

参数
id
返回

◆ getDataCount()

int DA::DADataManager::getDataCount ( ) const

获取变量管理器管理的数据数量

返回

◆ getDataIndex()

int DA::DADataManager::getDataIndex ( const DAData d) const

参数在变量管理器的索引

参数在变量管理器中有一个list来维护,这个索引就是链表的索引

参数
d
返回
如果没有在管理器中找到data,返回-1

◆ getDatasNameSet()

QSet< QString > DA::DADataManager::getDatasNameSet ( ) const
protected

把所有管理的变量的名字按照set返回

返回

◆ getUndoStack()

QUndoStack * DA::DADataManager::getUndoStack ( ) const

获取undo stack

返回

◆ isDirty()

bool DA::DADataManager::isDirty ( ) const

判断是否dirty,数据的改变和添加都会把此flag标记为true

返回

◆ notifyDataChangedSignal()

void DA::DADataManager::notifyDataChangedSignal ( const DAData d,
DADataManager::ChangeType  t 
)

触发DataChanged信号

参数
d
t

◆ removeData()

void DA::DADataManager::removeData ( DAData d)

移除数据

注解
此函数会发生信号
参见
dataRemoved
参数
d

◆ removeData_()

void DA::DADataManager::removeData_ ( DAData d)

带redo/undo的移除数据

注解
此函数会发生信号
参见
dataBeginRemove
dataEndRemoved
参数
d

◆ removeDatas_()

void DA::DADataManager::removeDatas_ ( const QList< DAData > &  datas)

批量移除数据

参数
datas

◆ setDirtyFlag()

void DA::DADataManager::setDirtyFlag ( bool  on)

设置脏标记

此函数在 判断 是否 需要保存时使用

参数
on

该类的文档由以下文件生成: