I suppose QString::number() with a base = 16 would do it, but it won't give you any format or padding options. But basically, if you want to use QString::arg(), you also must use a placeholder argument in the QString literal that forms the left-hand-side of the expression. Not sure why you object to this so much - it's the way the function is defined. Not a whole lot different from Python's "{0} {1}" formatting convention (although supposedly Python 3.1 lets you get away with "{} {}", but the string literal with braces is still required to format the output).