[英]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.