mirror of
https://github.com/YACReader/yacreader
synced 2025-06-04 01:28:55 -04:00
corregido bug en los modelos, no se trataba de emitir las se?ales beforeReset y reset
sino de llamar a los m?todos beginResetModel() y endesetModel() para invalidar el modelo ahora ya se puede liberar la memoria interna de los modelos sin problemas (aunque siguen existiendo memory leaks)
This commit is contained in:
parent
0e59d311d4
commit
ecee7e65ce
@ -144,7 +144,7 @@ void TableModel::setupModelData(unsigned long long int folderId,QSqlDatabase & d
|
|||||||
{
|
{
|
||||||
//QFile f(QCoreApplication::applicationDirPath()+"/performance.txt");
|
//QFile f(QCoreApplication::applicationDirPath()+"/performance.txt");
|
||||||
//f.open(QIODevice::Append);
|
//f.open(QIODevice::Append);
|
||||||
emit(beforeReset());
|
beginResetModel();
|
||||||
//QElapsedTimer timer;
|
//QElapsedTimer timer;
|
||||||
//timer.start();
|
//timer.start();
|
||||||
qDeleteAll(_data);
|
qDeleteAll(_data);
|
||||||
@ -165,7 +165,7 @@ void TableModel::setupModelData(unsigned long long int folderId,QSqlDatabase & d
|
|||||||
//txtS << "TABLEMODEL: Tiempo de creación del modelo: " << timer.elapsed() << "ms\r\n";
|
//txtS << "TABLEMODEL: Tiempo de creación del modelo: " << timer.elapsed() << "ms\r\n";
|
||||||
db.close();
|
db.close();
|
||||||
_database = db;
|
_database = db;
|
||||||
emit(reset());
|
endResetModel();
|
||||||
//f.close();
|
//f.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ int TreeModel::rowCount(const QModelIndex &parent) const
|
|||||||
|
|
||||||
void TreeModel::setupModelData(QString path)
|
void TreeModel::setupModelData(QString path)
|
||||||
{
|
{
|
||||||
emit(beforeReset());
|
beginResetModel();
|
||||||
if(rootItem != 0)
|
if(rootItem != 0)
|
||||||
delete rootItem; //TODO comprobar que se libera bien la memoria
|
delete rootItem; //TODO comprobar que se libera bien la memoria
|
||||||
filterEnabled = false;
|
filterEnabled = false;
|
||||||
@ -220,7 +220,7 @@ void TreeModel::setupModelData(QString path)
|
|||||||
|
|
||||||
setupModelData(selectQuery,rootItem);
|
setupModelData(selectQuery,rootItem);
|
||||||
_database.close();
|
_database.close();
|
||||||
emit(reset());
|
endResetModel();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,7 +249,7 @@ void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
|||||||
|
|
||||||
void TreeModel::setupFilteredModelData()
|
void TreeModel::setupFilteredModelData()
|
||||||
{
|
{
|
||||||
emit(beforeReset());
|
beginResetModel();
|
||||||
|
|
||||||
//TODO hay que liberar memoria de anteriores filtrados
|
//TODO hay que liberar memoria de anteriores filtrados
|
||||||
|
|
||||||
@ -285,7 +285,8 @@ void TreeModel::setupFilteredModelData()
|
|||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
setupFilteredModelData(selectQuery,rootItem);
|
setupFilteredModelData(selectQuery,rootItem);
|
||||||
_database.close();
|
_database.close();
|
||||||
emit(reset());
|
|
||||||
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TreeModel::setupFilteredModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
void TreeModel::setupFilteredModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||||
@ -381,7 +382,7 @@ void TreeModel::setFilter(QString filter, bool includeComics)
|
|||||||
|
|
||||||
void TreeModel::resetFilter()
|
void TreeModel::resetFilter()
|
||||||
{
|
{
|
||||||
emit(beforeReset());
|
beginResetModel();
|
||||||
filter = "";
|
filter = "";
|
||||||
includeComics = false;
|
includeComics = false;
|
||||||
//TODO hay que liberar la memoria reservada para el filtrado
|
//TODO hay que liberar la memoria reservada para el filtrado
|
||||||
@ -389,10 +390,12 @@ void TreeModel::resetFilter()
|
|||||||
filteredItems.clear();
|
filteredItems.clear();
|
||||||
TreeItem * root = rootItem;
|
TreeItem * root = rootItem;
|
||||||
rootItem = rootBeforeFilter; //TODO si no se aplica el filtro previamente, esto invalidaría en modelo
|
rootItem = rootBeforeFilter; //TODO si no se aplica el filtro previamente, esto invalidaría en modelo
|
||||||
//if(root !=0)
|
if(root !=0)
|
||||||
// delete root;
|
delete root;
|
||||||
|
|
||||||
rootBeforeFilter = 0;
|
rootBeforeFilter = 0;
|
||||||
filterEnabled = false;
|
filterEnabled = false;
|
||||||
emit(reset());
|
endResetModel();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -564,8 +564,8 @@ void LibraryWindow::loadLibrary(const QString & name)
|
|||||||
{
|
{
|
||||||
index = 0;
|
index = 0;
|
||||||
sm->clear();
|
sm->clear();
|
||||||
foldersView->setModel(NULL); //TODO comprobar pq no sirve con usar simplemente las señales beforeReset y reset
|
//foldersView->setModel(NULL); //TODO comprobar pq no sirve con usar simplemente las señales beforeReset y reset
|
||||||
comicView->setModel(NULL);
|
//comicView->setModel(NULL);
|
||||||
|
|
||||||
dm->setupModelData(path);
|
dm->setupModelData(path);
|
||||||
foldersView->setModel(dm);
|
foldersView->setModel(dm);
|
||||||
@ -604,6 +604,15 @@ void LibraryWindow::loadLibrary(const QString & name)
|
|||||||
|
|
||||||
void LibraryWindow::loadCovers(const QModelIndex & mi)
|
void LibraryWindow::loadCovers(const QModelIndex & mi)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
unsigned long long int folderId = 0;
|
||||||
|
if(mi.isValid())
|
||||||
|
{
|
||||||
|
TreeItem *item = static_cast<TreeItem*>(mi.internalPointer());
|
||||||
|
folderId = item->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
//cambiado de orden, ya que al llamar a foldersFilter->clear() se invalidan los model index
|
||||||
if(foldersFilter->text()!="")
|
if(foldersFilter->text()!="")
|
||||||
{
|
{
|
||||||
//setFoldersFilter("");
|
//setFoldersFilter("");
|
||||||
@ -620,13 +629,7 @@ void LibraryWindow::loadCovers(const QModelIndex & mi)
|
|||||||
column = mi.column();
|
column = mi.column();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long long int folderId = 0;
|
//comicView->setModel(NULL);
|
||||||
if(mi.isValid())
|
|
||||||
{
|
|
||||||
TreeItem *item = static_cast<TreeItem*>(mi.internalPointer());
|
|
||||||
folderId = item->id;
|
|
||||||
}
|
|
||||||
comicView->setModel(NULL);
|
|
||||||
dmCV->setupModelData(folderId,dm->getDatabase());
|
dmCV->setupModelData(folderId,dm->getDatabase());
|
||||||
comicView->setModel(dmCV);
|
comicView->setModel(dmCV);
|
||||||
//TODO automatizar (valorar si se deja al modelo)
|
//TODO automatizar (valorar si se deja al modelo)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user