Я работаю над c ++ / QML с Opencv Project. Я обнаружил, что лучший способ просмотреть обработанное изображение в QMl - написать собственный компонент QML, расширяющий QQuickPaintedItem
в c ++, и он работает хорошо:
class ImageView : public QQuickPaintedItem{
Q_OBJECT
Q_PROPERTY(QImage image READ image WRITE setImage NOTIFY imageChanged)
public:
// I need to pass a pointer of ImageService
ImageView(QQuickItem *parent = nullptr, ImageService *imageService = nullptr);
Q_INVOKABLE void updateImage();
void paint(QPainter *painter);
QImage image() const;
signals:
void imageChanged();
private:
QImage m_image;
ImageService *m_imageService;
};
и я зарегистрировал этот тип в C ++ следующим образом:
qmlRegisterType<ImageView>("opencv.plugin", 1, 0, "ImageView");
Моя проблема: У меня есть этот класс ImageService
, который выполняет все и обрабатывает последнюю версию изображения после обработки:
class ImageService
{
public:
ImageService();
bool openImage(const std::string &);
QImage toQImage();
bool isValid();
private:
std::string m_imagePath;
cv::Mat m_image;
};
Мне нужен компонент ImageView
для обновления после любой операции, которую ImageService
выполняет с использованием функции updateImage()
.
Я пытался: Я думал о:
- передаче указателя на
ImageService
в ImageView, но я не вижу, как. - Создание ImageService как
Qml Property
и передать изображение QML из Qml в компонент ImageView
, но я не думаю, что это хорошая идея.