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
을 끼워 넣으려고했는데, 결국, 중간에, 그리고 항상 똑같은 일을합니다. 그것은 Qt는 대화 상자의 모든 종류에 대해이 작업을 수행합니다 QMessageBox
, QFileDialog
등
나는 또한 생성자에서 setAttribute(Qt::WA_OpaquePaintEvent)
라인을 제거하려하고 배경은 베이지 색 대신 검은 색이었다. 같은 색깔은 아니지만 여전히 같은 문제입니다.
QMessageBox
은 Irrlicht 위젯의 내용을 어떻게 든 지우는 것처럼 보입니다. 왜이 일을하는거야? 어떻게 해결할 수 있습니까?