void MyGlWidget::initializeGL() {
try {
throw std::exception();
} catch(...) {
QMessageBox::critical(this, tr("Exception"),
tr("Exception occured"));
}
}
catch()でメッセージボックスが表示され、実行が再びinitializeGL()に入り、2番目のメッセージボックスが表示されます
私はbool変数を介してこれを回避しようとしています:
void MyGlWidget::initializeGL() {
if(in_initializeGL_)
return;
in_initializeGL_ = true;
try {
throw std::exception();
} catch(...) {
QMessageBox::critical(this, tr("Exception"),
tr("Exception occured"));
}
in_initializeGL_ = false;
}
しかし、これはクラッシュにつながります。そこで、paintGL()でエラーを表示することにしました(2つのメッセージボックスも表示されます):
void MyGlWidget::paintGL() {
if(in_paintGL_)
return;
in_paintGL_ = true;
if (!exception_msg_.isEmpty()) {
QMessageBox::critical(this, tr("Exception"),
exception_msg_);
exception_msg_.clear();
}
// rendering stuff
in_paintGL_ = false;
}
void MyGlWidget::initializeGL() {
try {
throw std::exception();
} catch(...) {
exception_msg_ = "Exception in initializeGL()";
}
}
これは問題を解決しますが、コードは醜いです。この問題のより良い解決策はありますか?
Qt4.7 VS2008