0

QQuickPaintedItem から継承するクラスを使用して、openCV でキャプチャされたビデオ フレームを表示しようとしています。

このクラスには、QTimer タイムアウト (40ms) に接続されている queryFrame() というスロットがあります。

connect(m_timer, SIGNAL(timeout()), this, SLOT(queryFrame()));

queryFrame() コード:

void CVCamScreen::queryFrame()
{
    if(!m_url.isEmpty()){
        if( !m_capture->isOpened() ) {
            m_capture->open( m_url.toStdString() );
        }

        cv::Mat frame;
        m_capture->read( frame );

        m_qImage = ipl2Qimg(new IplImage(frame));

        update();

        emit frameChanged();
    }
}

queryFrame() が呼び出されるたびに、ビューが更新されます。これを行っていますが、非同期で動作していません。

この CVCamScreen のそれぞれを独立した方法で更新するにはどうすればよいですか?

CamScreens をレンダリングする QML コード:

Repeater {
    model: 8

    CVCamScreen {
        Layout.fillWidth: true
        Layout.fillHeight: true

        url: Controller.urlCanal(index + 1)

        CustomBorder {
            commonBorder: true
            color: "#228e14"
            commonBorderWidth: 3
        }

        onUrlChanged: {
            start(); // starts the timer when the URL changes.
        }
    }
}
4

1 に答える 1