Can't you simply use QWidget::adjustSize()?