Important: Please read the Qt Code of Conduct -

Independence between dialog and application windows

  • Hello
    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 !

    Ricardo Sousa

  • 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": for further details.

  • Moderators has lots of information about dialogs in Qt. The section on modal dialogs is of special interest to you.

  • Hi,

    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.

    Many thanks!

    All the best

    Ricardo Sousa

  • 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....

    void MainWindow::VerMenuSpectrogram(){

    Ui_Spectrogram *ui_Spect;
    ui_Spect= new Ui_Spectrogram();
    QDialog D;


    I really thank you!

    Ricardo Sousa

    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!!!

    Ricardo Sousa

Log in to reply