What happens if you pass Qt::Tool directly to the QDialog constructor (i.e. QDialog(parent, Qt::Tool)) instead of setting it after construction?

I do not remember seeing a modal tool window in any GUI. Maybe this unusual pattern was not considered or tested in Qt.

On a side note, instead of QScopedPointer<Poppy> theBox(new Poppy(this)); you could simply allocate the Poppy on the stack (assuming you do want a modal dialog).