Last few hours I've been reading but not finding a good solution to what would seem a simple common problem. I have a QTreeView with a QFileSystemModel. I want to set the current index to the last file saved by the user and to scroll to that position. Because the qfilesystemmodel loads in an asynchronous way, if i immediately use the function scrollTo(mydesiredindex), like so:
Model = new QFileSystemModel;
Model->setRootPath(RootDirectory);
Model->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
ui.RootView->setModel(Model);
ui.RootView->setCurrentIndex(Model->index(LastUsedPath));
ui.RootView->scrollTo(Model->index(LastUsedPath));
the qtreeview scrolls to the file's current location, but then adds more files before it, so that mydesiredindex is pushed out of view.
I've tried to get a signal that the model finished populating the tree view, but to no avail. the signals directoryLoaded(const QString &), and rowsInserted(const QModelIndex &, int, int)) send out signals before before the model finishes populating.
Thanks for anyone's help.
I believe it may be related to the ordering of your commands. I order it as follows
self.tree.scrollTo(index)
self.tree.expand(index)
self.tree.setCurrentIndex(index)
Or in your code
ui.RootView->scrollTo(Model->index(LastUsedPath));
ui.RootView->expand(Model->index(LastUsedPath));
ui.RootView->setCurrentIndex(Model->index(LastUsedPath));
Hope it helps.