gpt4 book ai didi

c++ - initializeGL 中的 QMessageBox 再次调用 initializeGL

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:26 25 4
gpt4 key购买 nike

void MyGlWidget::initializeGL() {
try {
throw std::exception();
} catch(...) {
QMessageBox::critical(this, tr("Exception"),
tr("Exception occured"));
}
}

在 catch() 中显示消息框,执行再次进入 initializeGL(),并显示第二个消息框

我试图通过一个 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

最佳答案

解决方法如下: 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);
}
}

关于c++ - initializeGL 中的 QMessageBox 再次调用 initializeGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com