Witam, nakodziłem sobie taki prosty programik przy użyciu Qt
Problem jest taki: gdy wybiore jakiś plik/pliki i dam "remove files" to program się wywala. W konsoli Qt jest napisane tylko to:
Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly
02:53:32: The program has unexpectedly finished.
gui.cpp
void Gui::on_removeButton_clicked(){
QList<QListWidgetItem*> selected = fileList->selectedItems();
auto v = curArchive->getFiles();
QString buffer;
for(std::vector<FileData>::reverse_iterator it = v.rbegin(); it != v.rend(); it++){
for(QList<QListWidgetItem*>::reverse_iterator s = selected.rbegin(); s != selected.rend(); s++){
buffer = (*s)->text();
int pos = buffer.indexOf('|');
buffer = buffer.mid(pos + 2); // characer + space
if((*it).getFilename() == buffer.toStdString()){
curArchive->remove(std::next(it).base());
selected.erase(std::next(s).base());
}
}
}
loadFilesList();
updateActions(); //to tylko ustawia przyciski na wlaczone/wylaczone
ui_saveButton->setEnabled(true);
}
void Gui::loadFilesList(){
fileList->clear();
auto v = curArchive->getFiles();
QString buffer;
for(auto& item : v){
buffer.clear();
buffer = QString::number(fileList->count()+1);
buffer += ") Size: ";
buffer += this->locale().formattedDataSize(item.getDataLength());
buffer += " | ";
buffer += QString::fromStdString(item.getFilename());
fileList->addItem(buffer);
}
}
archive.h
std::vector<FileData> listFiles;
const std::vector<FileData>& getFiles() const { return listFiles; }
void remove(std::vector<FileData>::iterator iter);
archive.cpp
void Archive::remove(std::vector<FileData>::iterator iter){
modified = true;
listFiles.erase(iter);
}
curArchive to pointer do obecnego archiwum i jest poprawny
Jeśli trzeba coś jeszcze to podrzuce.
Troche czuje, że chyba źle sobie to poprojektowałem to, ale już dokończe tak jak jest.
Anyway, co poszło tu nie tak?