私はQtのコンテキストでIrrlichtを使用しています。これを行うには、QWidgetにIrrlichtデバイスを表示するIrrlichtWidget
クラスがあります。ここでは、そのクラスの関連する部分である:私はQMessageBox
を使用するまでQMessageBoxを開くときにIrrlichtウィンドウが黒くなるのはなぜですか?
class IrrlichtWidget : public QWidget{
Q_OBJECT
public:
IrrlichtWidget(){
irr::SIrrlichtCreationParameters params;
params.DriverType = irr::video::EDT_OPENGL;
params.WindowId = (void*)winId();
m_device = irr::createDeviceEx(params);
setAttribute(Qt::WA_OpaquePaintEvent);
m_timer = new QTimer;
m_timer->setInterval(0);
QObject::connect(m_timer, &QTimer::timeout, [this](){
m_device->getVideoDriver()->beginScene(true, true, irr::video::SColor(255, 255, 255, 255));
m_device->getSceneManager()->drawAll();
m_device->getVideoDriver()->endScene();
m_device->run();
});
m_timer->start();
}
private:
irr::IrrlichtDevice *m_device;
QTimer *m_timer;
}
これだけで正常に動作します。このクラスでプログラミングしていて、QMessageBox
を使用したかったときに、メッセージボックスを開くたびにIrrlichtウィジェットが黒くなっていたことに気付きました。私はこれをしなかった場合は、背景が黒だった
QObject::connect(m_timer, &QTimer::timeout, [this](){
m_device->getVideoDriver()->beginScene(true, true, irr::video::SColor(255, 255, 255, 255));
m_device->getSceneManager()->drawAll();
m_device->getVideoDriver()->endScene();
m_device->run();
QMessageBox::information(this, "Foo", "Bar");
});
:
それはこのように見えたように、何が起こっていたかを見つけるためにしようとするために、私はIrrlichtをメインループにQMessageBox
を挿入しましたここでは、比較するため
は、それはそれでQMessageBox
を持っていないことを唯一の違いと全く同じプログラムです:
Irrlichtのメインループのどこにでも、最初、最後、最後に、同じことをやってみました。 QMessageBox
、QFileDialog
など
私もコンストラクタで行を削除しようとした、その後、背景がベージュの代わりに黒だった:それは、Qtのダイアログボックスのすべての種類のためにこれを行います。同じ色ではありませんが、同じ問題です。
QMessageBox
は、Irrlichtウィジェットの内容を何とか消去しているようです。なぜこれをやっているのですか?どうすれば修正できますか?