【问题标题】:The program has unexpectedly finished. try catch throw in Qt程序意外结束。尝试在 Qt 中接球
【发布时间】:2018-07-17 22:07:57
【问题描述】:

我的 qt 项目有问题,当抛出异常时,我的 windows 崩溃并关闭,为什么?问题出在哪里?我不明白。

   class MyException:public std::exception{
    private:
        QMessageBox* mex;
    public:
        MyException(QString);

    };

    class err_parser_binary:public MyException{
    public:
        err_parser_binary(QString);
    };

MyException::MyException(QString d):mex(new QMessageBox()){
    mex->setText("Error");
    mex->setDetailedText(d);
    mex->button(QMessageBox::Ok);
    mex->show();
}

err_parser_binary::err_parser_binary(QString detail): MyException(detail){

}

QString binary_controller::calcolaop1op2(QString x, QString y, QString op) try{
...............
    Binary* pb=new Binary(op2);

..................
}
catch (err_parser_binary) {}

Binary::Binary(std::string str){
......
        throw err_parser_binary("only 1 o 0");
......
}

【问题讨论】:

  • 错误:程序意外结束。

标签: qt throw


【解决方案1】:

根据我的阅读,Qt 并不是真正的异常安全。看看this 页面。在顶部,它说:

初步警告:异常安全功能不完整!常见的 案例应该可以工作,但类可能仍会泄漏甚至崩溃。

Qt 本身不会抛出异常。而是使用错误代码。在 此外,某些类有用户可见的错误消息,例如 QIODevice::errorString() 或 QSqlQuery::lastError()。这有 历史和实际原因 - 打开异常可能会增加 库大小减少了 20% 以上。

您应该只使用错误代码和/或错误消息。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多