QML is used to specify the UI for an application. It is a declarative language that specifies UI components, their states and animations, etc. The syntax is JavaScript like in that it looks a bit like you are defining JavaScript objects. QML uses JavaScript to specify UI logic and calculations, and if your application is mostly UI (say, a simple game) you can code it entirely in QML + JavaScript (not unlike Flash). Nontrivial applications typically have a separate engine part written in Qt C++. The Qt signals, slots and properties system make it easy to integrate the QML part with the C++ engine part. That is actually a part of the idea with QML: it is easy enough to learn and use (there are graphical tools too) that designers can work with it to design the application UIs (instead of using Photoshop or Flash), and coders can concentrate on the engine part. So the UI design is actually working code, and if the designers get a great new idea and want to redesign the entire UI, instead of groaning (because they have to re-implement everything) the coders can just smile and tell them to go right ahead (because the designers will do the UI implementation themselves, and the engine part will be isolated behind its API).
QML is optimized for writing the kind of fluid UIs that mobile applications favor today, meaning there is a lot of support for animations and other eye candy, and everything is heavily optimized to run smoothly on mobile devices. HTML, on the other hand, is not optimized for writing such user interfaces. So, writing a non-trivial, non-web-page-like user interface takes much less time to do in QML than in HTML (if it is possible to achieve in HTML at all) and the resulting user experience will be much better.
Of course, if your main concern is portability across mobile platforms, then HTML (and something like PhoneGap) is the way to go. Or, like a (fellow) Nokia employee put it: "If you want to go fast, use QML, If you want to go deep, use Qt C++. If you want to go wide, use HTML."