Independence between dialog and application windows
I’m trying to include a dialog window in an application. Basically, I have a window (application window) that calls a dialog window. I´ve done that but when the dialog window is active I cannot turn application window active(push buttons for example). I only get that by closing the dialog window. What I would like to get is a totally independence between the application window and the dialog window.
Could somebody help me?
Many thanks !
This is dependent on the way you show your second form. Currently, it seems that you are using a modal form. You have used exec() to show it, I guess. To make it so that you can interact with both windows after showing, you need to make sure you do not create a modal window. You can do that by using show() and making sure that modal() is still false (it is by default).
Call show() instead of exec() on your QDialog subclass. You might also set the parent of the dialog to 0 (don't forget to manually delete the dialog then, as it's not deleted automatically be Qt in this case). See QDialog's docs on "Modeless Dialogs":http://doc.qt.nokia.com/4.7/qdialog.html#modeless-dialogs for further details.
http://doc.qt.nokia.com/latest/qdialog.html has lots of information about dialogs in Qt. The section on modal dialogs is of special interest to you.
Thank you for your answers.:)
In fact, I was using exec(). :)
The dialog window is non-modal.
I've changed to show() but the dialog window opens and suddenly closes...
I'm calling this dialog window from a menu.
Could you help me.
All the best
Please show us the code where you show your dialog.
I'm sure, it's pretty easy.
Perhaps, the dialog is creatot on the stack and not by new?
If it suddenly closes, perhaps you are creating your item on the stack instead of on the heap?
[quote author="Andre" date="1300904949"]If it suddenly closes, perhaps you are creating your item on the stack instead of on the heap?[/quote]
That's exactly my thought
This is the code....
ui_Spect= new Ui_Spectrogram();
I really thank you!
Edit: Fixed code layout. Please use the @ tags; Andre
My diagnoses was correct. You are creating your dialog on the stack instead of on the heap.
How do you know that...?:)
[quote author="RSousa" date="1301053052"]How do you know that...?:)[/quote]
I read the piece of code you posted, of course :-)
Look at line 10 of the snippet you just posted. What happens there? You create a variable called D on the stack. What happens once your code reaches line 13? That variable goes out of scope, and gets removed from the stack again. C++, the nice language it is, thoughtfully calls the destructor for the class in question for you (QDialog). Boom! Your dialog is gone again.
Because he knows the difference between stack and heap allocation. You obviously do not, so time to get some good C++ introduction and learn the basics.
Some keywords for google:
- stack allocation
- heap allocation
- scope of variable
Now I can see.... it works now.... I'm embarassed .... :)
I need vacations.....
I really thank you for all!
All the best!!!