我正在遍历列表并转换列表中的每个项目(文件名)。如果没有错误,我会显示文件的绿色图标,否则显示红色。我的下面的代码有一点逻辑来跟踪它,可能会更好吗?
for(int i = 0; i < numFiles; i++)
{
......
int allConverted = 0;
try
{
convertFile( file, dest1)
allConverted++;
}
catch(std::runtime_error err)
{
item->setIcon( QIcon("c:/code/Red.ico"));
QMessageBox::information(this, APP_NAME, err.what(), QMessageBox::Ok, QMessageBox::Abort) == QMessageBox::Abort);
}
try
{
convertFile( file, dest2)
allConverted++;
}
catch(std::runtime_error err)
{
item->setIcon( QIcon("c:/code/Red.ico"));
QMessageBox::info(this, APP_NAME, err.what(), QMessageBox::Ok, QMessageBox::Abort) == QMessageBox::Abort);
}
if (allConverted >= 2)
item->setIcon( QIcon("c:/code/Green.ico"));
}
答案 0 :(得分:1)
即使第一次通话失败,您是否想尝试第二次convertFile
?如果这是预期的,那么这样的东西会更清洁:
for(int i = 0; i < numFiles; i++) {
bool success = true;
try {
convertFile(file, dest1);
}
catch(const std::runtime_error& err) {
success = false;
QMessageBox::information(this, APP_NAME, err.what(), QMessageBox::Ok, QMessageBox::Abort) == QMessageBox::Abort);
}
try {
convertFile(file, dest2);
}
catch(const std::runtime_error& err) {
success = false;
QMessageBox::info(this, APP_NAME, err.what(), QMessageBox::Ok, QMessageBox::Abort) == QMessageBox::Abort);
}
if (success) {
item->setIcon(QIcon("c:/code/Green.ico"));
}
else {
item->setIcon(QIcon("c:/code/Red.ico"));
}
}
否则,它可以简化为:
for(int i = 0; i < numFiles; i++) {
try {
convertFile(file, dest1);
convertFile(file, dest2);
item->setIcon(QIcon("c:/code/Green.ico"));
}
catch(const std::runtime_error& err) {
item->setIcon(QIcon("c:/code/Red.ico"));
QMessageBox::information(this, APP_NAME, err.what(), QMessageBox::Ok, QMessageBox::Abort) == QMessageBox::Abort);
}
}
在旁注中,异常通常应该由const引用(我在此处说明)捕获,以便考虑多态层次结构。
答案 1 :(得分:0)
这个怎么样?
for(int i = 0; i < numFiles; i++)
{
bool anyErrors = false;
try
{
convertFile( file, dest1)
convertFile( file, dest2)
}
catch(std::runtime_error err)
{
anyErrors = true;
}
if (anyErrors)
{
item->setIcon( QIcon("c:/code/Red.ico"));
QMessageBox::information(this, APP_NAME, err.what(), QMessageBox::Ok, QMessageBox::Abort) == QMessageBox::Abort);
}
else
item->setIcon( QIcon("c:/code/Green.ico"));