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
が異なることを除いて同じコードです。映画と歌は完璧に機能します。すべての詳細を変更でき、リスト内の名前が自動的に更新されます。
しかし、アプリの名前を変更して [OK] をクリックしても、リスト内の名前は変更されず、ファイル内のアプリ情報も変更されませんQList
。
ただし、デバッガーを使用してすべてのステップをクリックすると、リストの名前と情報が変更されます。
したがって、基本的に私が尋ねようとしているのは、デバッガーを使用して各ステップを実行するときに上記のコードが機能するのに、実行するだけでは機能しないのはなぜですか?