In a single threaded program the signal call will not return until all the connected slots have been executed unless you use queued connections. Queued connections will be deferred until the event loop.

Another option is to use the same "file-instance" object to load the new file: the pointer doesn't change but you need to signal the views to refresh.