void MainWindow::edit()
{
//Check if item is selected, if not return
const int row = list->currentRow();
if( row == -1 )
return;
EditWindow w( this, currentCategory() );
switch( currentCategory() )
{
case cApp:
{
App old = appList.at( row );
w.setApp( old );
if( w.exec() == QDialog::Rejected )
return;
if( old == w.app() ) return;
else old = w.app();
if( dm->updateApp( old ) ){
appList.replace( row, old );
list->item(row)->setText( old.name() );
}
break;
}
case cFilm:
{
Film old = filmList.at( row );
w.setFilm( old );
if( w.exec() == QDialog::Rejected )
return;
if( old == w.film() ) return;
else old = w.film();
if( dm->updateFilm( old ) ){
filmList.replace( row, old );
list->item(row)->setText( old.name() );
}
break;
}
case cSong:
{
Song old = songList.at( row );
w.setSong( old );
if( w.exec() == QDialog::Rejected )
return;
if( old == w.song() ) return;
else old = w.song();
if( dm->updateSong(old) ){
songList.replace( row, old );
list->item(row)->setText( old.name() );
}
break;
}
}
displayItem(row);
}
此代码检查我们目前拥有的类别。然后它会编辑应用程序、电影或歌曲(取决于类别)。然后,当我更改一些信息时,它将这些更改写入数据库和全局QLists
,更改名称QListWidget
并在几个标签中显示当前项目的信息(这是最后一个函数)。
如您所见,除了不同之外,它是相同的代码QLists
。电影和歌曲完美运行。我可以更改每个细节,它会自动更新列表中的名称。
但是当我更改应用程序的名称并单击确定时,它不会更改列表中的名称,也不会更改QList
.
但是,当我使用调试器浏览它并单击每一步时,列表会更改名称和信息。
所以基本上我想问的是为什么上面的代码在使用调试器通过每个步骤时有效,但在运行它时无效?