My own experience as a long-time owner of all Spectrums ever made who changed to the QL soon after its launch: I operated the two computers in parallel: The Spectrum was used for games, the QL for more down-to-earth things like programming and "serious applications". I never really went into emulation and never felt the need to go into it. I'm pretty sure I never even tried an emulator back in the days. The few things I brought over to the QL from the Spectrum were text files and databases, those were transferred using the serial port and the ZX network. Today, speed of emulated machines is no longer really a problem - But why should you emulate a Spectrum on an emulated QL when you can do the same thing directly on the PC?
I had a Spectrum for two years before buying a QL and did lots of programming on both machines. The architecture of the QL is very different from the Spectrum, even when only considering Basic programming. The Spectrum's Basic is unstructured and needs GOTOs and GOSUBs, while SuperBasic looks more like Pascal and C.
Nevertheless, I have written similar applications for both machines. One of the more ambitious projects was BASICODE, which was a common Basic programming standard with programs aired over the radio (at the time very popular in Holland but also in Germany). It was based on Microsoft Basic and very difficult to implement on the Spectrum as the Spectrum's Basic was incompatible in a number of ways (e.g. string variable names and arrays) and I ended up rewriting half of the Spectrum's Basic interpreter to make it compatible. I've also written BASICODE for the QL and the main challenge here was not SuperBASIC but how to make a cassette interface for the QL. I eventually succeeded by using the Network interface with some simple electronics (after all it's just a 'bit banging' interface like the Spectrum's cassette port).
So, having BASICODE on both machines, it was indeed possible to port BASIC programs, albeit with soms limitations