QDir *temp = new QDir("%USERPROFILE%");
bool ok = temp->mkdir("abc");
そしてそれは機能しません。
移植可能な Qt コードの場合、静的メソッドQProcessEnvironment::systemEnvironment()を使用します。
QProcessEnvironment env(QProcessEnvironment::systemEnvironment());
QDir *temp = new QDir(env.value("USERPROFILE")); // returns empty string for unset variable
bool ok = temp->mkdir("abc");
代わりに、実際の質問のコメントで提案されているように、使用することもできます
#include <cstdio>
QString envValue(QString::fromLocal8bit(::getenv("USERPROFILE"))); // standard, yet deprecated in Windows...
Qt に文字エンコーディングを任せて、最初の選択肢を使用したいと思います。Qt 以外の関数を使用する場合、Windows ではgetenv_s または _wgetenv_sを使用してこれを「適切に」行う必要があると思います。