zoukankan      html  css  js  c++  java
  • QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。

    关于 slot传递 Mat 对象

    以前一直是使用 Qtimer 定时器,设定超时后读取 dialog 对象的 Mat成员实现在 UI 里显示图像,发现这样对以后集成其他面向过程的代码增加了复杂度。

    所以考虑使用 slot

    即使用多线程处理图像后,发送 signal 给 dialog对象,dialog中 connect 他们就行了。

    子线程.cpp

    ...

    for(;;){

    ...

    emit imageChanged (labelImg);

    ...

    }

    emit finished();

    ...

    dialog.h

    ...

    private slots:
    void updateImage(const cv::Mat &img);

    ...

    dialog.cpp

    ...

    qRegisterMetaType< cv::Mat >("cv::Mat");
    connect(worker, SIGNAL(imageChanged(const cv::Mat &)), this, SLOT(updateImage(const cv::Mat &)));

    ...

    子线程.h

    ...

    signals:
    void imageChanged(const cv::Mat &img);

    ...

    //////////////

    父类 Worker

    public slots:
    virtual void doWork();

    子线程

    class CTWorker : public Worker

    {
    public:
    CTWorker();
    public slots:
    void doWork(); //覆盖就 OK 了
    };

    #endif // CTWORKER_H

  • 相关阅读:
    CSS躬行记(9)——网格布局
    CSS躬行记(8)——裁剪和遮罩
    CSS躬行记(7)——合成
    CentOS 系统目录解析
    Linux 命令快捷键
    秒的精确度
    Oracle和mysql中装逼dual表的用途介绍
    mysql 的mgr集群
    ansible笔记
    cygwin
  • 原文地址:https://www.cnblogs.com/yuliyang/p/4201925.html
Copyright © 2011-2022 走看看