Paint device returned engine == 0 の対処法
QPainterを使ってウィジェットに描画するときに次のようなエラーが出ることがあります。
Paint device returned engine == 0, type: 1
この場合は次の2つの原因が考えられます。
- paintEvent関数以外からQPainterオブジェクトを作っている。
- 自クラス以外をQPainterのコンストラクタに渡している。
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」エラーの対処法でした。では、また!
関連項目
© Kaz