Особенность класса QTemporaryFile состоит в том, что временное имя файла не создается и неизвестно сразу после создания объекта временного файла.
Оно будет создано только после отработки метода open(). Поэтому нет никакой возможности узнать имя временного файла через метод fileName() до того момента, пока он не будет открыт.
Поэтому ничего не остается делать, как открывать/закрывать файл, а потом пользоваться полученным именем. Это очень странное и неудобное поведение, но вплоть до версии Qt 5.11 реализованно именно так.
На практике проще всего пользоваться QString QDir::tempPath() и генерацией случайной строки вместо имени файла.