2010-11-26 4 views
1
void MyGlWidget::initializeGL() { 
    try { 
     throw std::exception(); 
    } catch(...) {   
     QMessageBox::critical(this, tr("Exception"), 
      tr("Exception occured")); 
    }  
} 

もう一回initializeGLを呼び出します)メッセージボックスが、私はブール値を経由してこの問題を回避しようとして示されており、実行は(initializeGLに入る)、再び、第二のメッセージボックスQMessageBox(キャッチで

を示しています変数:

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

答えて

1

がソリューションです: http://labs.qt.nokia.com/2010/02/23/unpredictable-exec/

void MyGlWidget::initializeGL() { 
    try { 
     throw std::exception();   
    } catch(...) {   
     getExceptionMessage(&exception_msg_); 
     QMessageBox *msgbox = new QMessageBox(QMessageBox::Warning, 
               "Exception", 
               exception_msg_, 
               QMessageBox::Ok, 
               this); 
     msgbox->open(0, 0); 
    } 
} 
関連する問題