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. Call widget of mainwindow in an other class
Qt 6.11 is out! See what's new in the release blog

Call widget of mainwindow in an other class

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 3 Posters 2.3k Views 1 Watching
  • 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.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi
    Are you sure it crashes ?
    Not just closing?
    try for test

    void Splash::on_pushButton_2_clicked()
    {
        g.showMaximized();
    }
    

    and see if mainwindow shows.

    ? 1 Reply Last reply
    0
    • mrjjM mrjj

      Hi
      Are you sure it crashes ?
      Not just closing?
      try for test

      void Splash::on_pushButton_2_clicked()
      {
          g.showMaximized();
      }
      

      and see if mainwindow shows.

      ? Offline
      ? Offline
      A Former User
      wrote on last edited by
      #3

      @mrjj if I write only this works, but why in the other way doesn't work, the application writes crashes

      mrjjM Cobra91151C 2 Replies Last reply
      0
      • ? A Former User

        @mrjj if I write only this works, but why in the other way doesn't work, the application writes crashes

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #4

        @vale88
        I dont think it crashes i think it just closes as there is no top window.
        QApplication handles that.

        you can try

        int main(int argc, char *argv[])
        {
            QApplication a(argc, argv);
           a.setQuitOnLastWindowClosed(false);
        
        //    MainWindow w;
        //    w.showMaximized();
            Splash w;
            w.show();
        

        and see if that helps.

        1 Reply Last reply
        0
        • ? A Former User

          @mrjj if I write only this works, but why in the other way doesn't work, the application writes crashes

          Cobra91151C Offline
          Cobra91151C Offline
          Cobra91151
          wrote on last edited by Cobra91151
          #5

          @vale88

          Hello! I think the problem is with not initialized pointer - Ui::MainWindow *ptr;. For example try to initialize it in the Splash constructor.

          Example:

          ptr = new Ui::MainWindow();
          

          Also don't forget to delete ptr in the Splash destructor later.

          By the way, try to attach the debugger to detect the issue.

          ? 1 Reply Last reply
          0
          • Cobra91151C Cobra91151

            @vale88

            Hello! I think the problem is with not initialized pointer - Ui::MainWindow *ptr;. For example try to initialize it in the Splash constructor.

            Example:

            ptr = new Ui::MainWindow();
            

            Also don't forget to delete ptr in the Splash destructor later.

            By the way, try to attach the debugger to detect the issue.

            ? Offline
            ? Offline
            A Former User
            wrote on last edited by
            #6

            @Cobra91151 I wrote:

            void Splash::on_pushButton_2_clicked()
            {
                ptr = new Ui::MainWindow;
            
                close();
                g.showMaximized();
                ptr->stackedWidget_3->setCurrentIndex(3);
                //emit invio_segnaleM();
            
            }
            
            

            but it crashes

            Cobra91151C 1 Reply Last reply
            0
            • ? A Former User

              @Cobra91151 I wrote:

              void Splash::on_pushButton_2_clicked()
              {
                  ptr = new Ui::MainWindow;
              
                  close();
                  g.showMaximized();
                  ptr->stackedWidget_3->setCurrentIndex(3);
                  //emit invio_segnaleM();
              
              }
              
              

              but it crashes

              Cobra91151C Offline
              Cobra91151C Offline
              Cobra91151
              wrote on last edited by Cobra91151
              #7

              @vale88

              First, the problem with your code is, that every time you press the button (button click) new object generates and it create the memory leak.

              Set ptr = new Ui::MainWindow; to the Splash constructor to fix it and delete it in the destructor.

              Secondly, if it still crashes, try to debug your application with attached debugger.

              ? 1 Reply Last reply
              0
              • Cobra91151C Cobra91151

                @vale88

                First, the problem with your code is, that every time you press the button (button click) new object generates and it create the memory leak.

                Set ptr = new Ui::MainWindow; to the Splash constructor to fix it and delete it in the destructor.

                Secondly, if it still crashes, try to debug your application with attached debugger.

                ? Offline
                ? Offline
                A Former User
                wrote on last edited by
                #8

                @Cobra91151 I tried with debug but I on't understand, it says that the inferior is...

                Cobra91151C 1 Reply Last reply
                0
                • ? A Former User

                  @Cobra91151 I tried with debug but I on't understand, it says that the inferior is...

                  Cobra91151C Offline
                  Cobra91151C Offline
                  Cobra91151
                  wrote on last edited by
                  #9

                  @vale88

                  What is your compiler and OS? Attach the screenshot of the issue from debugger here.

                  1 Reply Last reply
                  1
                  • mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #10

                    Hi
                    Why are you creating
                    void Splash::on_pushButton_2_clicked()
                    {
                    ptr = new Ui::MainWindow; <<< WHY ? the g already done it
                    close();
                    g.showMaximized();
                    // this is not good. = ptr->stackedWidget_3->setCurrentIndex(3);
                    //should be
                    g.SetPage(3); // SetPage(int index) being a new function that does ui->stackedWidget_3->setCurrentIndex(index);
                    //emit invio_segnaleM();
                    }

                    ? 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      Hi
                      Why are you creating
                      void Splash::on_pushButton_2_clicked()
                      {
                      ptr = new Ui::MainWindow; <<< WHY ? the g already done it
                      close();
                      g.showMaximized();
                      // this is not good. = ptr->stackedWidget_3->setCurrentIndex(3);
                      //should be
                      g.SetPage(3); // SetPage(int index) being a new function that does ui->stackedWidget_3->setCurrentIndex(index);
                      //emit invio_segnaleM();
                      }

                      ? Offline
                      ? Offline
                      A Former User
                      wrote on last edited by
                      #11

                      @mrjj yes but if I want to acceed to an object of the mainwindow, like a pushButton, how must I do?

                      mrjjM 1 Reply Last reply
                      0
                      • ? A Former User

                        @mrjj yes but if I want to acceed to an object of the mainwindow, like a pushButton, how must I do?

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by mrjj
                        #12

                        @vale88
                        Well you can make the UI public. Bad design.
                        Or simply add public functions to MainWindow that does what you want.
                        like
                        g.SomethingWithButton();

                        inside SomethingWithButton(), you have access to its UI and can
                        do what ever you like.

                        So make a few functions, that does what you need with MainWindows Widgets.

                        ? 1 Reply Last reply
                        1
                        • mrjjM mrjj

                          @vale88
                          Well you can make the UI public. Bad design.
                          Or simply add public functions to MainWindow that does what you want.
                          like
                          g.SomethingWithButton();

                          inside SomethingWithButton(), you have access to its UI and can
                          do what ever you like.

                          So make a few functions, that does what you need with MainWindows Widgets.

                          ? Offline
                          ? Offline
                          A Former User
                          wrote on last edited by
                          #13

                          @mrjj I used connect and it works, but nw I try in this way

                          mrjjM 1 Reply Last reply
                          0
                          • ? A Former User

                            @mrjj I used connect and it works, but nw I try in this way

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by
                            #14

                            @vale88
                            The good part about using functions to access the private UI in MainWindow is
                            that rest of program dont know which widgets it has.
                            So if you change something in MainWindow, you only need to change one other place
                            in the (access) function. rest of the program needs no changes.

                            ? 1 Reply Last reply
                            0
                            • mrjjM mrjj

                              @vale88
                              The good part about using functions to access the private UI in MainWindow is
                              that rest of program dont know which widgets it has.
                              So if you change something in MainWindow, you only need to change one other place
                              in the (access) function. rest of the program needs no changes.

                              ? Offline
                              ? Offline
                              A Former User
                              wrote on last edited by
                              #15

                              @mrjj thanks it works

                              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