в таком случае мне нужно будет определять суммарный размер всех контроллов, которые лежат в диалоге, с учетом их расположения в лэйаутах. А это не тривиально.
Всё довольно-таки тривиально.
Перед QDialog::show() вызываешь QDialog::adjustSize(), после чего получаешь размер окна диалога и уже полученным размером фиксируешь окно.
PS. Иногда перед adjustSize() может потребоваться вызвать QApplication::processEvents().