#include "FITKAbstractProgramDriver.h" #include "FITKAppFramework.h" #include "FITKSignalTransfer.h" #include namespace AppFrame { /** * @brief FITKProgramInputInfo 类的析构函数 */ FITKProgramInputInfo::~FITKProgramInputInfo() { } /** * 设置程序输入信息的参数。 * * 此函数用于设置FITKProgramInputInfo对象的参数。参数通过 QStringList 类型的 args 传递。 * 目前,该函数实现为空,但预留了未来扩展的可能,用于处理输入参数的解析和配置。 * * @param args 参数列表,以 QStringList 的形式传递。 */ void FITKProgramInputInfo::setArgs(const QStringList& args) { } /** * @brief 获取程序输入参数 * * 该函数旨在返回程序的输入参数列表。当前实现中,它返回一个空的QStringList。 * 在未来的开发中,这个函数可能会被用于返回实际的程序输入参数。 * * @return QStringList 程序输入参数列表。当前返回空列表。 */ QStringList FITKProgramInputInfo::args() { return QStringList(); } QStringList FITKProgramInputInfo::getMonitorFiles() { return QStringList(); } QStringList FITKProgramInputInfo::getMonitorPath() { return QStringList(); } FITKAbstractProgramerDriver::~FITKAbstractProgramerDriver() { if (_fileWatcher != nullptr) delete _fileWatcher; } /** * @brief 获取程序类型 * * 该函数用于返回当前编程器支持的程序类型。然而,在这个实现中,它简单地返回-1, * 这可能表示不支持或未实现此功能。在继承这个类并实现这个功能时, * 应该根据具体的编程器类型返回相应的程序类型。 * * @return int 程序类型。返回-1表示不支持或未实现。 */ int FITKAbstractProgramerDriver::getProgramType() { return -1; } QString FITKAbstractProgramerDriver::getProgramName() { return QString(); } void FITKAbstractProgramerDriver::setInputInfo(FITKProgramInputInfo* info) { _inputInfo = info; } AppFrame::FITKProgramInputInfo* FITKAbstractProgramerDriver::getProgramInput() { return _inputInfo; } void FITKAbstractProgramerDriver::start() { } void FITKAbstractProgramerDriver::stop() { } /** * @brief 发送消息给程序驱动器 * * 此函数用于向程序驱动器发送特定类型的消息。它首先检查FITKAPP是否为空, * 如果为空,则直接返回。然后,它获取信号传输对象,并检查该对象是否为空。 * 如果信号传输对象不为空,它将发送消息给程序驱动器。 * * @param messageType 消息的类型,用于标识不同类型的消息。 * @param message 要发送的实际消息内容。 */ void FITKAbstractProgramerDriver::sendMessage(int messageType, const QString& message) { // 检查FITKAPP是否已经被初始化,如果没有,则直接返回。 if (FITKAPP == nullptr) return; // 从FITKAPP中获取信号传输对象。 FITKSignalTransfer* transfer = FITKAPP->getSignalTransfer(); // 检查信号传输对象是否为空,如果为空,则直接返回。 if (transfer == nullptr) return; // 发送消息 。 emit transfer->sendProgramDriverMessageSig(this, messageType, message); } /** * 监视文件目录。 * * 此函数用于启动或停止对特定文件和目录的监视。当文件或目录发生变化时,会触发相应的信号, * 从而调用连接的槽函数进行处理。如果不需要监视,可以通过将m参数设置为false来停止监视。 * * @param m 指示是否开始监视的布尔值,默认为true,表示开始监视。 */ void FITKAbstractProgramerDriver::monitorFileDirectories(bool m /*= true*/) { // 如果已经存在文件监视器实例,则先释放资源 if (_fileWatcher != nullptr) delete _fileWatcher; _fileWatcher = nullptr; // 如果不需监视(m为false)或输入信息为空,则直接返回 if (!m || _inputInfo == nullptr) return; // 创建新的文件监视器实例 _fileWatcher = new QFileSystemWatcher; // 获取需要监视的文件和目录路径 QStringList f = _inputInfo->getMonitorFiles(); QStringList p = _inputInfo->getMonitorPath(); // 将文件和目录路径添加到文件监视器中 _fileWatcher->addPaths(p); _fileWatcher->addPaths(f); // 连接文件变化和目录变化的信号到相应的槽函数 connect(_fileWatcher, &QFileSystemWatcher::fileChanged, this,&FITKAbstractProgramerDriver::fileChangedSlot); connect(_fileWatcher, &QFileSystemWatcher::directoryChanged,this, &FITKAbstractProgramerDriver::directoryChangedSlot); } /** * 文件更改槽函数。 * * 当监视的文件发生变化时,此槽函数被触发。它通过应用的信号传输器发出一个信号, * 指示文件已更改,并传递发生变化的文件路径。 * * @param file 发生变化的文件路径。 */ void FITKAbstractProgramerDriver::fileChangedSlot(const QString& file) { if (FITKAPP == nullptr) return; FITKSignalTransfer* transfer = FITKAPP->getSignalTransfer(); if (transfer == nullptr) return; emit transfer->fileDirectoryChangedSig(this, true, file); } /** * 目录更改槽函数。 * * 当监视的目录发生变化时,此槽函数被激活。功能类似于`fileChangedSlot`,但针对的是目录变更, * 并通过信号传输器发出目录变化的信号。 * * @param dir 发生变化的目录路径。 */ void FITKAbstractProgramerDriver::directoryChangedSlot(const QString& dir) { if (FITKAPP == nullptr) return; FITKSignalTransfer* transfer = FITKAPP->getSignalTransfer(); if (transfer == nullptr) return; emit transfer->fileDirectoryChangedSig(this, true, dir); } }