QFileDialog zamyka całą aplikację...

0

Witajcie. Mam taki problem a mianowicie, gdy otwiera mi sie okienko QFileDialogu i nacisnę "Cancel" albo krzyżyk do zamknięcia to zamyka mi się cała aplikacja an ie tylko ten dialog...

QString filename = QFileDialog::getSaveFileName(
                0,
                tr("Open file"),
                QDir::currentPath(),
                tr("Playlists (*.txt)")
                );
    if(filename.isNull())return;
    QFile qFile(filename);
    if(qFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate))
    {
        QTextStream out(&qFile);
        for(int i = 0; i < qList->length(); i++)
        {
            out << qList->at(i).toString() << "\n";
        }
    }
 
0

W podanym kodzie (którego jest zdecydowanie za mało) widać jednego podejrzanego, który jest zgodny z opisem problemu

if(filename.isNull())return;
0

ok poradziłem sobie z tym, otóż zwracałem QList<QUrl> z listy plików które otwarłem. Jeśli dałem cancel albo 'x' to zwracało (no wlasnie nie wiadomo co, chyba puste :P) dlatego Segmentation wyskakiwał. Mam natomiast kolejny problem. Otóż mam playera do odtwarzania mp3(QMediaPlayer). Playlista to QMediaPlaylist. Gdy dodam jakieś rzeczy do listy a potem robie 'playlist->clear()' dostaje znowu Segmentation. Ktos wie czemu ?

 
// Ładowanie playlisty z pliku
if(selectedItem->text() == "Load Playlist")
        {

            QList<QUrl> filepaths = m->loadPlaylist();
            if(filepaths.isEmpty()) return;
            SoundPlayer->permStopPlaying();
            SoundPlayer->cleanPlayList(); // tutaj sie CRASHUJE!
            //SoundPlayer->mpPlayerRefresh();
            ui->listWidget->clear();
            for(int i = 0; i < filepaths.length(); i++)
            {
                QString filename = filepaths.at(i).fileName();
                filename.remove(".mp3");
                ui->listWidget->addItem(filename);
                SoundPlayer->addSongToPlaylist(filepaths[i]);

            }
            ui->listWidget->setCurrentRow(0);

Tak wygląda cleanPlayList:

 
void C2Sound::cleanPlayList()
{
    if(!mpPlayList->isEmpty())
    {
         mpPlayList->clean(); // tutaj crashuje. mpPlayList jest to wskaznik na QMediaPlayList. Nowy obiekt tworzę w konstruktorze c2sound
    }
    mpList->clearSongs();
}
0

#Edit do górnego posta.
Program działa dobrze, jeśli MUZYKA W PLAYERZE nie jest puszczona tj nigdy nie była odtwarzana.
Natomiast jeśli gra muzyka i usunę OSTATNI element z PlayListy program crashuje. Co więcej jeśli zastopuje całkowicie odtwarzanie to również crashuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1