Time for action – taking the zoom level into account
As a last detail, I would like to mention that you can draw an item differently depending on its scale. To do that, the level of detail can be used. You use the passed pointer to QStyleOptionGraphicsItem
of the item's paint
function and call levelOfDetailFromTransform()
with the painter's world transformation. We change the paint function of the ScaleItem
item to the following:
const qreal detail = option->levelOfDetailFromTransform(painter->worldTransform()); const QColor fillColor = (detail >= 5) ? Qt::yellow : Qt::red;
What just happened?
The detail
parameter now contains the maximum width of unity square, which was mapped to the painter coordinate system via the painter's world transformation matrix. Based on that value, we set the fill color of the border rectangles to yellow or red. The expression detail >= 5
will become true
if the rectangle is displayed at least five times as large as in a normal state. The level of...