2016-04-14 8 views
0

Qtアプリケーションイメージをリアルタイムで別のデバイスに転送したいと考えています。 私はすべての内容でMainScreenウィジェットをレンダリングし、それをビットマップとしていくつかの通信チャンネルに渡す必要があります。Qtのオフラインフレームをレンダリングする

レンダリングを呼び出す回数を最小限に抑えたいのは、CPUが高価なためですが、UIのすべての変更を選択できるようにしたいと考えています。

だから私は、paintEvent内コマンドをレンダリング>QWidget-を入れてみましたが、それは再帰的な再描画エラーが発生しました。

再帰的な再描画のエラーなしにアプリケーションフレームを取得する最適な方法は何ですか?

+0

は[QWidget :: grab](http://doc.qt.io/qt-5/qwidget.html#grab)で、あなたが探しているものではありませんか? –

+0

これはフレームをつかむもう1つの機能ですが、私が言われたように問題は起動のタイミングです。タイマーで起動すると、タイマーが遅い場合にイベントが失われるか、タイマーが速すぎる場合にオーバーヘッドが大きくなる可能性があります。 paintEventからのアクティベーションにより、再帰的な再描画エラーが発生します。 – Alex

答えて

0

これは最善の解決策ではないかもしれませんが、すでに呼び出されている場合はrender()呼び出しをスキップして再帰を中断する可能性があります。

void paintEvent() { 

    ... 

    if(! m_rendering) { // m_rendering must be class member variable 
     m_rendering = true; 
     render(); 
     m_rendering = false; 
     return; 
    } 

    ... 

} 

しかしMainScreenpaintEvent()が呼び出された場合にのみレンダリングされることに注意してください。だからあなたは子供のウィジェットの再描画を見逃す可能性が高いです。これを解決するには、によって制御されたupdate()コールを使用してください。必要なフレームレートに応じて。

+0

これは可能な解決策かもしれない、私はそれを試してみましょう。 – Alex