簡體   English   中英

Qt中未捕獲到異常

[英]Exception not caught in Qt

我在Qt中捕獲異常有問題。

這是我的代碼:

mainwindow.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);
    }
}
...

fan.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塊中:

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

您不能因為Qt不喜歡它而拋出異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM