Do you mean that the UI should be responsive and the user could do something useful while the widgets are generated and shown one by one? You can probably use a zero timer signal and a slot for that. In this way everything happens in the same thread but the signals created by user interactions are handled between timer signals.
First, to be able to pass a method like this it needs to be static, otherwise there's no instance to run it on.
Second, to save you from unnecessary copies it should take the string as a const reference, not by value.
Third, similar to above, to save yourself from copies where not needed you should use a const reference in the foreach variable declaration.
Next, The return type of the function you pass should be the type of the element of the container, not the container itself i.e. QString in this case.
And last but not least - the call to map() is not blocking, so it will return immediately and the function will exit. You passed a local string list to it so it means the asynchronous calls will operate on freed memory and most likely crash. If you want to wait for the results you should rather use blockingMap() instead and if not then you need to store that string list somewhere for the whole duration of the map() execution.