Navigation between forms



  • Good evening everyone.

    I'd like some advice about the design of my little Qt app. But first here's what in my app at the moment:

    1- my MainWindow is pretty much your typical menu, multiple buttons dedicated each for a certain functionality (login, help, about, etc...)
    2- every functionality has a designer form class.
    3- currently, main creates an instance of MainWindow and shows it

    Now, what I know how to do is creating instances of the design forms and showing them in a "MainWindow()::on_functionality_button_clicked()" slot, and hiding the MainWindow.

    The problem with that is that if I chose to login for example, the login form is showed and if I successfully identify myself, I can use the same mechanism to, say, open an interface or something.
    But what if I want to cancel the login, and want to view the user guide before? If the login form is instantiated inside a slot in MainWindow, how can I reshow the MainWindow if I close a form functionality like the login?
    How can I navigate between forms in a responsive way?

    I hope you're understanding my problem. Your help is really appreciated.



  • Your loginObject & MainWindow object should be independent. Each of these objects should have appropriate signals and slots. You need to connect between them using signal & slots.

    Login object has to have success & fail signals.

    Login *log = new Login
    MainWindow *mW = new MainWindow

    connect(log,SIGNAL(success()),mW,SLOT(show());

    if something fails.
    connect(log,SIGNAL(Fail()),mW,SLOT(hide());

    So tight coupling between Login object & MainWindow should be avoided.



  • Hi @8105

    If you have a lot of widgets and you want to navigate between these widgets for me the best solution to do , is to have a QStackedWidget and add all your pages to this stackedWidget

    The QStackedWidget class provides a stack of widgets where only one widget is visible at a time.
    

    Have a look at QStackedWidget doc:

    http://doc.qt.io/qt-5/qstackedwidget.html#details

    As second thing i advise you to use is the QStateMachine framework, this will allow you to know at any moment (the state of your app , and the form) and to go to the current next state (form)

    Have a look at QStatemachine framework:

    http://doc.qt.io/qt-4.8/statemachine-api.html

    In Qt examples there is still an example with using QStackedWidget

    http://doc.qt.io/qt-5/qtwidgets-dialogs-configdialog-example.html

    Hope this can help !



  • Thank you both for the advice.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.