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. URGENT : How to Show Another Window From MainWindow in QT using c++
Forum Updated to NodeBB v4.3 + New Features

URGENT : How to Show Another Window From MainWindow in QT using c++

Scheduled Pinned Locked Moved Solved General and Desktop
qt creator
42 Posts 6 Posters 11.0k Views 2 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.
  • A Offline
    A Offline
    Anonymous_Banned275
    wrote on last edited by
    #6

    @Jasmin-Quinn said in URGENT : How to Show Another Window From MainWindow in QT using c++:

    linking two projects together.

    I am not sure if I understand the above.

    Let me say this - SUB_DIRS concept is to manage multiple INDEPENDENT project. By manage I mean they are NOT running as ONE project "out of the box".

    However, with some effort they can all work as a single project.
    ( I do use QProcess)
    I am deliberately avoiding using term "linked together" - that should be reserved for real "linker".

    Utilizing SUB_DIRS concept I am using "MDI" as top project and executing SUB_DIRS "subprojects" by using "windows standard " menu driven "actions" coded in "MDI" .

    So if I understand your task to be able "link one project from another" -
    in my case "main controlling project " is "MDI" and one of my "other projects" is "scan for local Bluetooth devices"....
    The SUB_DIRS used this way may sound too convoluted - but it does aid in code reusing.

    Jasmin QuinnJ 1 Reply Last reply
    2
    • Jasmin QuinnJ Jasmin Quinn

      @mrjj
      OUTPUT: 01:41:08: The process was ended forcefully.

      I added these lines in my .pro file:
      TARGET = Chess
      TEMPLATE = app

      and these on my mainwindow.cpp:
      void MainWindow::on_lancer_partie_clicked()
      {

      game = new Game();
      game->show();
      game->displayMainMenu();
      }

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

      @Jasmin-Quinn

      The process was ended forcefully.

      It means it crashed.

      I can see it also has a resource.qrc
      file which you also need for its graphics.
      (and the PNG files also, placed in sub folder)

      alt text

      So i guess thats the reason for the crash.

      Jasmin QuinnJ 1 Reply Last reply
      0
      • mrjjM mrjj

        @Jasmin-Quinn

        The process was ended forcefully.

        It means it crashed.

        I can see it also has a resource.qrc
        file which you also need for its graphics.
        (and the PNG files also, placed in sub folder)

        alt text

        So i guess thats the reason for the crash.

        Jasmin QuinnJ Offline
        Jasmin QuinnJ Offline
        Jasmin Quinn
        wrote on last edited by
        #8

        @mrjj Capture.PNG
        they're all in but still same error

        mrjjM 1 Reply Last reply
        0
        • Jasmin QuinnJ Jasmin Quinn

          @mrjj Capture.PNG
          they're all in but still same error

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

          @Jasmin-Quinn
          Hi
          The path is wrong
          you have 2 times images and in the original example there is only one folder
          so it still can't find the pngs

          For test i added to a default GUI app and it just works so
          don't give up on it. its just the image path not being correct, then it should run.

          make sure the PNG files are in the project folder.
          (same as where your .pro file is)
          in a subfolder called Images
          It cannot be in any more sub folders as then path in code is wrong.

          Jasmin QuinnJ 1 Reply Last reply
          0
          • mrjjM mrjj

            @Jasmin-Quinn
            Hi
            The path is wrong
            you have 2 times images and in the original example there is only one folder
            so it still can't find the pngs

            For test i added to a default GUI app and it just works so
            don't give up on it. its just the image path not being correct, then it should run.

            make sure the PNG files are in the project folder.
            (same as where your .pro file is)
            in a subfolder called Images
            It cannot be in any more sub folders as then path in code is wrong.

            Jasmin QuinnJ Offline
            Jasmin QuinnJ Offline
            Jasmin Quinn
            wrote on last edited by
            #10

            @mrjj Hello Sir, actually the second folder wasn't open so the pictures are only included in :/imagesCapture.PNG

            1 Reply Last reply
            0
            • A Anonymous_Banned275

              @Jasmin-Quinn said in URGENT : How to Show Another Window From MainWindow in QT using c++:

              linking two projects together.

              I am not sure if I understand the above.

              Let me say this - SUB_DIRS concept is to manage multiple INDEPENDENT project. By manage I mean they are NOT running as ONE project "out of the box".

              However, with some effort they can all work as a single project.
              ( I do use QProcess)
              I am deliberately avoiding using term "linked together" - that should be reserved for real "linker".

              Utilizing SUB_DIRS concept I am using "MDI" as top project and executing SUB_DIRS "subprojects" by using "windows standard " menu driven "actions" coded in "MDI" .

              So if I understand your task to be able "link one project from another" -
              in my case "main controlling project " is "MDI" and one of my "other projects" is "scan for local Bluetooth devices"....
              The SUB_DIRS used this way may sound too convoluted - but it does aid in code reusing.

              Jasmin QuinnJ Offline
              Jasmin QuinnJ Offline
              Jasmin Quinn
              wrote on last edited by
              #11

              @AnneRanch Thank you Sir but am a beginner and i really looked it out but could'nt find something close to my case ! can you tell me how i can run it on click using QProcess and what should i include / add in my .pro file

              mrjjM 1 Reply Last reply
              0
              • Jasmin QuinnJ Jasmin Quinn

                @AnneRanch Thank you Sir but am a beginner and i really looked it out but could'nt find something close to my case ! can you tell me how i can run it on click using QProcess and what should i include / add in my .pro file

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

                @Jasmin-Quinn
                Hi
                I looked over the code for chess.

                Do notice it has a global variable called game it uses all over the place.
                You must have the same in your project.

                In main.cpp it
                has
                Game *game;

                and the other modules use that.

                Did you do the same in your project?

                Also, do you know how to use the debugger ? It can be used to find out what crashes.
                But might be the game variable since the images now seem fine.

                Jasmin QuinnJ 1 Reply Last reply
                0
                • A Offline
                  A Offline
                  Anonymous_Banned275
                  wrote on last edited by
                  #13

                  @Jasmin-Quinn I would suggest to "back-up " a little.
                  Start with "new project" -> Application (Qt) ->Qt Widget Application
                  plain "application".

                  Now you can add a class to your one and only project.

                  Then you have a simple "display window " application and its "form" and a test class - all as one project.
                  Add "testFunction " to your class.

                  In QtDesigner add "button" and use "go to slot" - click - to build "SIGNAL /SLOT"
                  Then you have a function where you can actually test the "click button".

                  Then you add debugging - #inlcude <QDebug> - and use QDebug in your "button pushed " function to output test message. .

                  Then let the "button pushed" test function to create an instance of your class and execute the testFunction - 'button pushed".

                  That is in essence what you asking , is it not ?
                  You have "main window" "widget" and you can create another "widget" - by simply replacing the button click "show debug message" with your other "project" / window./widget.

                  All of this is done letting the QtCreator /QTDesigner do the grunt work and let them implement whatever they need - .pro etc...
                  ( From personal experience - do not mess with .pro too much)

                  And if you do make typo error - you get more meaningfull error message than the "project terminated...." Those are not that obvious to fix, but with peppering your code with QDebug messages you have an easier job.

                  When the "project terminated" happens - just use debugger , add break points and "step thru" your code until it "breaks". You may not find exact spot where the problem is, but it gets you into "hood" - "close enough for government work".
                  Best of luck coding.

                  1 Reply Last reply
                  0
                  • mrjjM mrjj

                    @Jasmin-Quinn
                    Hi
                    I looked over the code for chess.

                    Do notice it has a global variable called game it uses all over the place.
                    You must have the same in your project.

                    In main.cpp it
                    has
                    Game *game;

                    and the other modules use that.

                    Did you do the same in your project?

                    Also, do you know how to use the debugger ? It can be used to find out what crashes.
                    But might be the game variable since the images now seem fine.

                    Jasmin QuinnJ Offline
                    Jasmin QuinnJ Offline
                    Jasmin Quinn
                    wrote on last edited by
                    #14

                    @mrjj Hi sorry for my late reply, yes i added Game *game in both my main.cpp and mainwindow.h but still crashes . And no i don't know how to use the debugger can you help me?

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      Anonymous_Banned275
                      wrote on last edited by
                      #15
                      1. Add #include <QDebug> to your main cpp
                      2. Add 3 qDebug line of code to constructor
                      3. Add break point @ line 12 - left click on line number (get red dot)
                      4. click "F5" to start in "debug" mode
                      5. select #3 on bottom status bar - "Application output" to observe qDebug output
                      6. click "F10 " to step into next code line
                        etc etc .....

                      That is just about the minimal setup to use QDebug.
                      Of course there are many more options - including observing variables .

                      But that will be covered in next lesson... ( just kidding , for now )

                      b2e2275b-6a93-4a28-9ef2-e4e0d8b5fa6b-image.png

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        Anonymous_Banned275
                        wrote on last edited by
                        #16

                        I have added variable int a .
                        Now when you "step thru" the code you can observe changes in a.
                        Cool ?
                        So if the variable does not have value expected....it is usually the coder's fault...

                        bb0cb5ba-a62c-4e17-8aff-4c21bcd91467-image.png

                        Jasmin QuinnJ 1 Reply Last reply
                        1
                        • A Anonymous_Banned275

                          I have added variable int a .
                          Now when you "step thru" the code you can observe changes in a.
                          Cool ?
                          So if the variable does not have value expected....it is usually the coder's fault...

                          bb0cb5ba-a62c-4e17-8aff-4c21bcd91467-image.png

                          Jasmin QuinnJ Offline
                          Jasmin QuinnJ Offline
                          Jasmin Quinn
                          wrote on last edited by Jasmin Quinn
                          #17

                          @AnneRanch Hi !Thank you for your patience and time .
                          I followed your steps and this is what i got when i clicked on the button
                          Capture.PNG

                          jsulmJ 1 Reply Last reply
                          0
                          • Jasmin QuinnJ Jasmin Quinn

                            @AnneRanch Hi !Thank you for your patience and time .
                            I followed your steps and this is what i got when i clicked on the button
                            Capture.PNG

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #18

                            @Jasmin-Quinn Your "game" pointer seems to be dangling pointer (not pointing to a valid instance). So, make sure game is pointing to a Game instance...

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            Jasmin QuinnJ 1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @Jasmin-Quinn Your "game" pointer seems to be dangling pointer (not pointing to a valid instance). So, make sure game is pointing to a Game instance...

                              Jasmin QuinnJ Offline
                              Jasmin QuinnJ Offline
                              Jasmin Quinn
                              wrote on last edited by
                              #19

                              @jsulm I don't understand what should I change ! I know the code works pretty fine on its own then i must've made a mistake when calling the game in my project.

                              • Mainwindow.h
                                mainwh.png

                              • Mainwindow.cpp
                                mainwincpp.png

                              • main.cpp
                                maincpp.png

                              • chessboard.cpp (where the segmentation fault occured)
                                chessboard.png

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

                                Hi,

                                You have static game pointer in your main.cpp file that is never initialized and that is the one used in the Chessboard class.

                                However, the architecture is wrong. Why would you need a static Game object created somewhere and then all of a sudden the Chessboard class in need to know about it using extern ?

                                If Chessboard really needs Game then make that relation explicit.

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

                                Jasmin QuinnJ 1 Reply Last reply
                                1
                                • SGaistS SGaist

                                  Hi,

                                  You have static game pointer in your main.cpp file that is never initialized and that is the one used in the Chessboard class.

                                  However, the architecture is wrong. Why would you need a static Game object created somewhere and then all of a sudden the Chessboard class in need to know about it using extern ?

                                  If Chessboard really needs Game then make that relation explicit.

                                  Jasmin QuinnJ Offline
                                  Jasmin QuinnJ Offline
                                  Jasmin Quinn
                                  wrote on last edited by
                                  #21

                                  @SGaist Hi,
                                  i found the game source code in github and i wanted to integrate it in my project . And since it works pretty fine on its own so i figured i did a mistake in either main.cpp or mainwindow.cpp . I actually don't even know what using extern stands for .

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

                                    You should read about it.

                                    In any case, it's not the right way to do it. You can remove the instance you have in your widget but do not forget to instanciate the one you have in your main.cpp file.

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

                                    Jasmin QuinnJ 1 Reply Last reply
                                    0
                                    • SGaistS SGaist

                                      You should read about it.

                                      In any case, it's not the right way to do it. You can remove the instance you have in your widget but do not forget to instanciate the one you have in your main.cpp file.

                                      Jasmin QuinnJ Offline
                                      Jasmin QuinnJ Offline
                                      Jasmin Quinn
                                      wrote on last edited by Jasmin Quinn
                                      #23

                                      @SGaist You were right . It had something to do with the instance but when i removed the extern this happened

                                      • chessboard.cpp
                                        remove.png

                                      However when i kept it and added this line in my main.cpp like this

                                      • main.cpp
                                        instance.png

                                      it didn't crash and it showed this window, which means it couldn't load the chessboard or the ressources (in the middle of the game such as the pawn, queen ..)
                                      exec.png
                                      exec2.png

                                      and as an OUTPUT :
                                      DEBUG TRACE MainWindow::MainWindow(QWidget) @ line # 42
                                      DEBUG TRACE MainWindow::MainWindow(QWidget
                                      ) @ line # 43
                                      DEBUG TRACE MainWindow::MainWindow(QWidget*) @ line # 44
                                      DirectWrite: CreateFontFaceFromHDC() failed (Indique une erreur dans un fichier d’entrée, tel qu’un fichier de polices.) for QFontDef(Family="", pointsize=18, pixelsize=24, styleHint=5, weight=50, stretch=100, hintingPreference=0) LOGFONT("MS Sans Serif", lfWidth=0, lfHeight=-24) dpi=96**

                                      1 Reply Last reply
                                      0
                                      • nageshN Offline
                                        nageshN Offline
                                        nagesh
                                        wrote on last edited by nagesh
                                        #24

                                        @Jasmin-Quinn Solution as per the existing implementation of chessboard application (Just to make the integration works fine)
                                        1)Copy the required files to the existing project.
                                        2)In Mainwindow.cpp create the global game object pointer;
                                        Game *game; //I discourage using global, suggest only to make it work
                                        3)In on_lancer_partie_clicked() create the instance of it
                                        game = new Game();
                                        game->show();
                                        game->displayMainMenu();

                                        Jasmin QuinnJ 1 Reply Last reply
                                        0
                                        • nageshN nagesh

                                          @Jasmin-Quinn Solution as per the existing implementation of chessboard application (Just to make the integration works fine)
                                          1)Copy the required files to the existing project.
                                          2)In Mainwindow.cpp create the global game object pointer;
                                          Game *game; //I discourage using global, suggest only to make it work
                                          3)In on_lancer_partie_clicked() create the instance of it
                                          game = new Game();
                                          game->show();
                                          game->displayMainMenu();

                                          Jasmin QuinnJ Offline
                                          Jasmin QuinnJ Offline
                                          Jasmin Quinn
                                          wrote on last edited by
                                          #25

                                          @nagesh Hi,
                                          I already have all the files in my project and i created the instance on on_lancer_partie_clicked() . As for creating a global game object pointer in Minwindow.cpp it crashes .
                                          However , when i implement it in my main.cpp like this , it works .
                                          The only problem is that i need it to work when i click on the button .

                                          • Main.cpp
                                            main.cpp.png

                                          Is it possible that it needs to be inside the QApplication Class ?

                                          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