0

次のコードがあります。

paintGL()
{

    if(mouse_was_clicked)
    {
       ... do the color picking with openGL to identify a clicked element

       ... !!! now I need to call again paintGL() to switch the selected element from the 
              old one to the new one but I can't create a recursive cycle!
    }
    else
    {
       ... normal code to draw the scene and the selected element in red ...
    }
}

行が示唆するように、ペイント イベントをもう一度呼び出す方法が必要です。潜在的なライブロックを作成せずにこれを達成する方法はありますか? 新しいペイントイベントを延期するようなものですか?

4

2 に答える 2

3

ここで何をしているのかを正確に伝えるのは少し難しいです。

paintGL がマウス ボタンがクリックされたことを検出したときに表示ウィジェット (カラー ピッカー) を設定しようとしている場合は、イベントを混同しています。フラグ/変数を設定し、再描画をトリガーするマウスクリックを処理するための別のアクションを作成する必要があります。IE では、マウス イベント処理を再描画コールバックの外に移動します。

ここであなたの問題を簡単に誤解していた可能性がありますが、そうであればお詫び申し上げます。

ただし、一般的なルールとして、QT で再帰的な再描画が必要になった場合は、システムに対してではなく、システムに対して作業を行っている可能性があります。

于 2012-07-21T21:51:39.550 に答える
3

内部の制御フローpaintGL()がそれほど単純である場合は、現在elseブロック内にあるコンテンツがすべての場合に実行されることを確認してください。

void MyWidget::paintGL()
{
    if(mouse_was_clicked)
    {
        ... do the color picking with openGL to identify a clicked element
    }

    ... normal code to draw the scene and the selected element in red ...
}
于 2012-07-21T21:47:04.430 に答える