I have two different strategies: For certain dialogs I use a static function to show them for example in my custem QFileDialog. These dialogs are created in the static function and they are deleted after use. I create other dialogs for example a settings window in demand: I set them to null in the constructor and check before showing the dialog if the pointer is still null: If yes I create the dialog, if no I show the already cerated dialog. This is the recommend strategy for Qt/Embedd to gain some startup performance but I think startup performance is also not bad on desktoop systems. From
http://doc.trolltech.com/3.3/emb-performance.html#general :
Create dialogs and widgets once, then QWidget::hide() and QWidget::show() them, rather than creating them and deleting them every time they are needed. This will use a little more memory, but will be much faster. Try to create them the first time "lazily" to avoid slow startup (e.g. only create a Find dialog the first time the user invokes it).