我在 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/