Вы можете использовать маску с оператором AND, чтобы сделать это:
int val = -1;
qDebug() << QString("%1 : %2").arg(val).arg(val & 0xffffffff, 8, 16, QLatin1Char('0'));
будет отображаться
"- 1: ffffffff"
EDIT
Как и было запрошено в комментариях, вот один из способов иметь переменную length
в диапазоне 0 < length <= 8
:
int mask = 0xffffffff >> (32 - 4 * length); // assuming a 32 bit integer
int val = -1;
qDebug() << QString("%1 : %2").arg(val).arg((unsigned int)(val & mask), length, 16, QLatin1Char('0'));