QtでOpenNIから取得した深度データを描画させるためにQGLWidget::paintGL()に描画する処理を記述したんですが、リサイズなどのイベントが発生しないとpaintGL()はコールされないため、何もしないと描画されないという状態になってしまいました。
調べてみると毎フレーム自動的に描画させるためにはやはりeventFilter()で描画を呼ぶ処理を記述しないといけないようです。
ひとまず下記のように書いたらうまく描画されるようになりました。UPDATE_INTERVALのような決めうちな値は使っているのは、毎回描画するようにしてしまうと描画処理が呼ばれすぎるせいかGUIの更新が遅れてしまったからです。
MyWidget::MyWidget( QWidget *parent )
: QGLWidget(parent)
{
qApp->installEventFilter( this );
}
bool MyWidget::eventFilter(QObject *obj, QEvent *e)
{
static int n = 0;
const int UPDATE_INTERVAL = 10;
if( n > UPDATE_INTERVAL )
{
makeCurrent();
paintGL();
update();
n = 0;
}
++n;
return false;
}
Qtイベントのアイドル状態とディスプレイへの描画処理完了が判定できる方法があれば、もっとましな書き方ができそうです。