How do I auto-adjust the size of a QDialog depending on the text length of one of its children?
Asked Answered
C

3

13

I have a QDialog I'm working with. It is made somewhat like a QMessageBox. I noticed that the size of the QMessageBox (and the size of its label) depends on the size of the message displayed.

How would I make the size of my QDialog adjust automatically like a QMessageBox? Presently my QDialog contains a button box and a label, and the QDialog is layout Vertical.

(I know I could just use the message box directly but eventually I will have more complex dialogs.)

Canea answered 4/11, 2009 at 17:45 Comment(0)
M
23

Automatic solution:

Use layouts and set size policies to QSizePolicy::Expanding. In QtDesigner, once all your children are placed on your QDialog, then click on the Adjust Size button next layout ones. Your QDialog will be automatically resized at runtime.

Manual solution:

The QWidget class has a method adjustSize that resize the QWidget to fit its content. Just call it when all children are set.

Melnick answered 5/11, 2009 at 9:37 Comment(3)
the manual solution does not work in my case: i have a QDialog with a QVBoxLayout with a QTableWidget and a QHBoxLayout with 2 buttons, i have set the policies to Expanding and calling adjustSize on the dialog does exactly nothing (visible)Leaf
It's important to call QApplication::processEvents() before calling adjustSize(), as documented here: daniel-albuschat.blogspot.de/2009/08/…Condyloma
Also use QSpacersBelletrist
S
1

Set your dialog to be expanding, and very small. Then, be sure to set your message before showing the dialog. When shown, it will try to find its proper size, based on the size of the objects it contains. (This happens recursively, so if the dialog isn't the direct parent of the label in which you show your message, make sure everything between the label and the dialog is set to use layouts.)

Stunner answered 4/11, 2009 at 21:15 Comment(0)
L
0

A TIP : if you try to use "adjustSize()" function when dialog is hidden, it may not be works fine. It would be better to use it after the "show()" function.

Leannleanna answered 2/9, 2020 at 8:52 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.