Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Switching between two ui forms / QMainWindow screens

Switching between two ui forms / QMainWindow screens

Scheduled Pinned Locked Moved Solved General and Desktop
13 Posts 3 Posters 3.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #4

    Not to sound rude but that code base is a bit messy:

    • You have two **Gui objects in you main.cpp that are not used at all.
    • You are setting a geometry on your coreGui object but then call showMaximized followed by show.

    Also using a custom thread only for a 5 second timer is way overkill.

    What exactly do you want to do with your application ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    N 1 Reply Last reply
    1
    • SGaistS SGaist

      Not to sound rude but that code base is a bit messy:

      • You have two **Gui objects in you main.cpp that are not used at all.
      • You are setting a geometry on your coreGui object but then call showMaximized followed by show.

      Also using a custom thread only for a 5 second timer is way overkill.

      What exactly do you want to do with your application ?

      N Offline
      N Offline
      nitks.abhinav
      wrote on last edited by
      #5

      @SGaist said in Switching between two ui forms / QMainWindow screens:

      ou have two **Gui objects in you main.cpp that are not used at all.
      You are setting a geometry on your coreGui object but then call showMaximized followed by show.

      Also using a custom thread only for a 5 second timer is way overkill.
      What exactly do you want to do with your application ?

      Yes I know , this is kind of a PoC I am doing and this is what I want to achieve:

      1. Keep two separate GUIs (ui forms).
      2. When application starts, it should spawn a thread which will run timer and at the same time display first GUI on screen (happens in C'TOR).
      3. When the timer of the thread goes off, it will emit its SIGNAL and SLOT function of main will get called which will stop the first GUI and replace with second one.

      Thanks

      1 Reply Last reply
      0
      • dheerendraD Offline
        dheerendraD Offline
        dheerendra
        Qt Champions 2022
        wrote on last edited by
        #6

        Which platform r u trying this ? Is it embedded box or desktop ? I have sample for ur use case. I can share you. It works perfectly.

        Dheerendra
        @Community Service
        Certified Qt Specialist
        http://www.pthinks.com

        N 1 Reply Last reply
        0
        • dheerendraD dheerendra

          Which platform r u trying this ? Is it embedded box or desktop ? I have sample for ur use case. I can share you. It works perfectly.

          N Offline
          N Offline
          nitks.abhinav
          wrote on last edited by
          #7

          @dheerendra

          Hi, Its for embedded Linux.

          1 Reply Last reply
          0
          • dheerendraD Offline
            dheerendraD Offline
            dheerendra
            Qt Champions 2022
            wrote on last edited by
            #8

            Does you logic works on desktop platform ?

            Dheerendra
            @Community Service
            Certified Qt Specialist
            http://www.pthinks.com

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #9

              And why not just use a single shot QTimer ?

              I really fail to see the use for that secondary thread except needless complexity.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              N 1 Reply Last reply
              2
              • SGaistS SGaist

                And why not just use a single shot QTimer ?

                I really fail to see the use for that secondary thread except needless complexity.

                N Offline
                N Offline
                nitks.abhinav
                wrote on last edited by
                #10

                @SGaist

                Hi,

                This is just for PoC, BelowI created application with one QMainWindow class and two ui classes derived from QWidget. Then I used QStackedWidget to switch the ui forms but
                I cannot see anything on screen.
                Thank you for help,

                /Second UI */
                namespace Ui {
                class RaptorCoreGUI;
                }
                 
                class RaptorCoreGUI : public QWidget
                {
                    Q_OBJECT
                 
                public:
                    explicit RaptorCoreGUI(QWidget *parent = 0);
                    ~RaptorCoreGUI();
                    void configInitData(bool);
                    void setlabel(QString);
                 
                private:
                    Ui::RaptorCoreGUI *ui;
                };
                 
                /*First UI*/
                amespace Ui {
                class RaptorLrsGUI;
                }
                 
                class RaptorLrsGUI : public QWidget
                {
                    Q_OBJECT
                 
                public:
                    explicit RaptorLrsGUI(QWidget *parent = 0);
                    ~RaptorLrsGUI();
                    void setlabel(QString);
                 
                private:
                    Ui::RaptorLrsGUI *ui;
                };
                 
                /*Base class  derived from  QMainWindow*/
                class Base : public QMainWindow
                {
                    Q_OBJECT
                public:
                   RaptorLrsGUI *lrsGUI;
                   RaptorCoreGUI *coreGUI;
                   QStackedWidget *stackedWidget;
                   QVBoxLayout *layout;
                  ~Base();
                   explicit Base (QWidget *parent = 0);
                 
                 
                private slots:
                    void rcvInitData();
                };
                 
                /*Second UI CPP*/
                RaptorCoreGUI::RaptorCoreGUI(QWidget *parent) :
                    QWidget(parent),
                    ui(new Ui::RaptorCoreGUI)
                {
                    ui->setupUi(this);
                    this->setAutoFillBackground(true);
                    this->setStyleSheet("background-color:white;");
                }
                 
                RaptorCoreGUI::~RaptorCoreGUI()
                {
                    delete ui;
                }
                 
                 
                void RaptorCoreGUI::setlabel(QString label)
                {
                    qDebug() << "Main Thread(COREGUI): Setting Label\n";    
                    ui->label->setText(label);
                }
                 
                /*First UI cpp*/
                RaptorLrsGUI::RaptorLrsGUI(QWidget *parent) :
                    QWidget(parent),
                    ui(new Ui::RaptorLrsGUI)
                {    
                    ui->setupUi(this);
                    this->setAutoFillBackground(true);
                    this->setStyleSheet("background-color:white;");
                }
                 
                RaptorLrsGUI::~RaptorLrsGUI()
                {
                    qDebug() << "Main Thread: destroying the ui object \n";
                    delete ui;
                }
                 
                void RaptorLrsGUI::setlabel(QString label)
                {
                    qDebug() << "Main Thread(LSRGUI): Setting Label\n";    
                    ui->label->setText(label);
                }
                 
                 
                /*main.cpp*/
                Base::Base(QWidget *parent) :
                      QMainWindow(parent, Qt::FramelessWindowHint)
                {
                       qDebug() << "Base CTOR called\n";
                 
                       QPalette pal = palette();  // retrieves the default palette for the widget, as defined by the app's style
                       pal.setColor( QPalette::Window, Qt::white );
                       setPalette( pal );
                 
                       setAutoFillBackground( true );
                 
                 
                       //Show the first screen, loading raptor status       
                       lrsGUI = new RaptorLrsGUI;
                       lrsGUI->setlabel(QString("Loading Raptor Status..."));
                       coreGUI = new RaptorCoreGUI;
                 
                       stackedWidget = new QStackedWidget(this);
                       stackedWidget->addWidget(lrsGUI);
                       stackedWidget->addWidget(coreGUI);
                 
                       stackedWidget->setCurrentIndex(0);
                       setCentralWidget(stackedWidget);
                }
                 
                Base::~Base()
                {
                    qDebug() << "Main Thread: destroying base objects \n";
                    delete lrsGUI;
                    delete coreGUI;
                    delete stackedWidget;
                }
                 
                void Base::rcvInitData()
                {
                    qDebug()<< "Main Thread (CALLBACK): Display second screen\n";
                    stackedWidget->setCurrentIndex(1);
                }
                 
                //! [1]
                int main(int argc, char *argv[])
                {
                    QApplication app(argc, argv);
                 
                    //Instantiate base class    
                    Base baseObj;
                 
                 
                    //instantiate Client thread object
                    ClientThread clientThread;
                    qDebug() << "Connecting sendmsg and handle_callback1()\n";
                    QObject::connect(&clientThread, SIGNAL(sendInitData()), &baseObj, SLOT(rcvInitData()), Qt::QueuedConnection);
                 
                    qDebug() << "Main Thread: starting clockThread\n";
                    clientThread.start();
                 
                    app.exec();
                    qDebug() << "Mian Thread: Quiting clockThread\n";
                    clientThread.quit();
                    qDebug() << "Main Thread: Waiting on clockThread \n";
                    clientThread.wait();
                    return 0;
                }
                
                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #11

                  Is it me or are you missing a call to baseObj.show(); in your main.cpp ?

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  N 1 Reply Last reply
                  0
                  • SGaistS SGaist

                    Is it me or are you missing a call to baseObj.show(); in your main.cpp ?

                    N Offline
                    N Offline
                    nitks.abhinav
                    wrote on last edited by
                    #12

                    @SGaist

                    Yes, that was the thing I missed, silly mistake.

                    Thank you very much for help.

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #13

                      You're welcome !

                      Since you have it working now, please mark the thread as solved using the "Topic Tools" button so that other forum users may know a solution has been found :)

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved