#pragma once #include #include #include #include #include "DataModelRegistry.hpp" #include "NodeDataModel.hpp" #include "opcv/CvImageData.h" #include "opcv/CvAlgorithmTools.h" #include #include using QtNodes::PortType; using QtNodes::PortIndex; using QtNodes::NodeData; using QtNodes::NodeDataType; using QtNodes::NodeDataModel; using QtNodes::NodeValidationState; class CvImageRGB2GrayModel :public NodeDataModel { Q_OBJECT public: CvImageRGB2GrayModel(); virtual ~CvImageRGB2GrayModel() {} public: QString caption() const override { return QStringLiteral("cv图像转灰度"); } QString name() const override { return QStringLiteral("cv图像转灰度"); } virtual QString modelName() const { return QStringLiteral("cv图像转灰度"); } QWidget* embeddedWidget() override { return Q_NULLPTR; } bool resizable() const override { return false; } NodeValidationState validationState() const override { return modelValidationState; } QString validationMessage() const override { return modelValidationError; } unsigned int nPorts(PortType portType) const override; NodeDataType dataType(PortType portType, PortIndex portIndex) const override { return CvImageData().type(); }; void setInData(std::shared_ptr, int) override; std::shared_ptr outData(PortIndex port) override; protected: bool RunTask(); signals: void SignalCvImageRgb2Gray(cv::Mat rgbImg); public slots: void GetRgb2GrayResult(cv::Mat grayImg); public: NodeValidationState modelValidationState = NodeValidationState::Warning; QString modelValidationError = QStringLiteral("图片输入未连接!"); private: CvAlgorithmTools* mAlgoTool = Q_NULLPTR; QThread* mChildThread = Q_NULLPTR; std::shared_ptr mCvImage; };