Paint device returned engine == 0 の対処法

QPainterを使ってウィジェットに描画するときに次のようなエラーが出ることがあります。

Paint device returned engine == 0, type: 1

この場合は次の2つの原因が考えられます。

1つめはQWidgetクラスの描画処理はすべてpaintEvent関数内で呼ばれるのでpaintEvent関数以外からQPainterオブジェクトを作ってはいけないということです。。

悪いコード例
/**paintEvent以外から呼ばれる関数*/
void myFunc()
{
    QPainter painter(this);
        ///paintEvent以下の関数でないからエラー
}

2つめはpaintEventをオーバーロードしたウィジェット以外はQPainterには渡してはいけないということです。

悪いコード例
void paintEvent(QPaintEvent * e)
{
    QPainter painter(otherWidget);
}

上記の2点を直した正しいコード例は次のようになります。

void paintEvent(QPaintEvent * e)
{
    QPainter painter(this);
    
    ///描画処理...
}

以上、「Paint device returned engine==0」エラーの対処法でした。では、また!

関連項目
プライバシーポリシー