c++ - Qt 中未捕获异常

标签 c++ qt

我在 Qt 中捕获异常有问题。

这是我的代码:

主窗口.cpp

...
void MainWindow::on_editFanButton_clicked()
{
    Fan *fan = 0;
    try
    {
        fan = new Fan(this->selectedFanId(),this);
        connect(fan,SIGNAL(edited()),this,SLOT(fanEdited()));
        fan->edit();

    }
    catch(QString e)
    {
        delete fan;
        QMessageBox::critical(this,"Błąd",e);
    }
}
...

范.cpp

void Fan::edit()
{
    FanEdit *fanEdit = new FanEdit(this);
    connect(fanEdit,SIGNAL(fanEdited()),this,SLOT(fanEdited()));
    fanEdit->show();
}
void Fan::fanEdited()
{
    emit edited();
}
...

fanedit.cpp

void FanEdit::on_saveButton_clicked()
{
    DatabaseConnector *databaseConnector = 0;
    databaseConnector = new DatabaseConnector();

    QSqlQuery *query = new QSqlQuery();
    if(peselChanged)
    {
        query->prepare("select * from kibic where pesel= :pesel");
        query->bindValue(":pesel",ui->peselEdit->text());
        query->exec();
        if(query->next()) throw QString("Kibic o podanym numerze pesel już istnieje!");
    }

    ...

}

我在 void FanEdit::on_saveButton_clicked() 中抛出异常时遇到程序终止错误。可能因为没有捕获到异常而终止。

我应该在哪里捕获异常?在 mainwindow.cpp 或 fan.cpp 中并重新抛出它?

最佳答案

我想 FanEdit::on_saveButton_clicked() 不是从 MainWindow::on_editFanButton_clicked() 调用的。您必须将 FanEdit::on_saveButton_clicked() 包装到 try-catch block 中:

void FanEdit::on_saveButton_clicked()
{
    try
    {
       // code goes here
    } 
    catch (...)
    {
       // don't rethrow
    }
}

你不能重新抛出异常,因为 Qt doesn't like it .

关于c++ - Qt 中未捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25548079/

相关文章:

c++ - 为什么我们在内存中限制堆栈的大小而不是堆的大小

c++ - QTableView委托(delegate)小数点后的数字

QtCreator 2.4.1 控制台输入

python - 如何检查加载了什么网址?

qt - 我如何支持每个 QTableView 单元格两个单独的可双击值?

C++,Integer和Char数组转换麻烦

C++ 覆盖 std::string 的赋值 ( = ) 运算符

qt - 如何检测 QDialog.exec() 是否处于事件状态

C++读取csv文件;每行获取两个字符串

C++ 二叉树打印节点