【发布时间】:2015-02-25 16:20:49
【问题描述】:
我正在遍历列表并转换列表中的每个项目(文件名)。如果没有错误,我会为文件显示绿色图标,否则为红色。我下面的代码有太多的逻辑来跟踪这个,能更好吗?
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"));
}
【问题讨论】:
-
编辑:您正在重复 (convertFile...allConverted...trycatch),在我看来,这是一个包含在单个 try/catch 语句中的 cicle 的尖叫
-
我还是要运行循环,如果有错误我只需要相应地标记某些项目。
-
此外,您可以将 allConverted++ 和 if(allconv 等折叠为: if (++allConverted >= 2) item->setIcon( QIcon("c:/code/Green.ico"));
-
通过引用捕获异常。它们可能是多态的。