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. How to use Windows Message Loop and Qt Application Exec?
Forum Updated to NodeBB v4.3 + New Features

How to use Windows Message Loop and Qt Application Exec?

Scheduled Pinned Locked Moved General and Desktop
23 Posts 7 Posters 13.9k Views 3 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.
  • M mrjj
    20 Sept 2018, 06:46

    @YJCN
    Hi
    in case that nativeEvent simply cannot work with decade-old COM crap (1998)
    there is always the options of using a plain c++ app that will handle the downloading / save to file and
    you simply call it with QProcess from Qt GUI app.

    Y Offline
    Y Offline
    YJCN
    wrote on 20 Sept 2018, 06:54 last edited by
    #9

    @mrjj The Canon 's demo is using MFC. Why MFC could use?

    J M 2 Replies Last reply 20 Sept 2018, 07:10
    0
    • Y YJCN
      20 Sept 2018, 06:54

      @mrjj The Canon 's demo is using MFC. Why MFC could use?

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 20 Sept 2018, 07:10 last edited by
      #10

      @YJCN said in How to use Windows Message Loop and Qt Application Exec?:

      Why MFC could use?

      Because it is Microsofts own GUI framework using the Windows event loop...

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

      1 Reply Last reply
      2
      • Y YJCN
        20 Sept 2018, 06:54

        @mrjj The Canon 's demo is using MFC. Why MFC could use?

        M Offline
        M Offline
        mrjj
        Lifetime Qt Champion
        wrote on 20 Sept 2018, 07:20 last edited by
        #11

        @YJCN
        MFC is very old too :)

        Anyway i wonder with that line

        if(msg->message==275)

        means ? where did u get this magic number from ?

        Y 1 Reply Last reply 20 Sept 2018, 07:40
        0
        • M mrjj
          20 Sept 2018, 07:20

          @YJCN
          MFC is very old too :)

          Anyway i wonder with that line

          if(msg->message==275)

          means ? where did u get this magic number from ?

          Y Offline
          Y Offline
          YJCN
          wrote on 20 Sept 2018, 07:40 last edited by
          #12

          @mrjj
          This my CMD programm code

          int main (){       
                  EdsCameraRef camera;
          	EdsUInt32 tv;
                  init_camera(camera);
          	//start_liveview(camera);
          	//TakePicture(camera);
          	
          	take_photo(camera,1,1000);
          	//TakePhoto();
          	//dispose(camera);
          	cout << "before message" << endl;
          	MSG msg;
          	while (GetMessage(&msg, NULL, NULL, NULL))
          	{
          		cout << "in while" << " msg.message:"<<msg.message<<endl;
          		TranslateMessage(&msg);
          		cout << "TranslateMessage" << endl;
          		DispatchMessage(&msg); // Ends up calling objectEventFnc
          		cout << "DispatchMessage" << endl;
          		break;
          	}
          	cout << "after message" << endl;
                  EdsCloseSession(camera);
          	cout << "EdsCloseSession(camera);";
          	EdsTerminateSDK();
          	system("pause");
                  return 0;
          

          This is output
          0_1537429196448_3c672381-54c0-4382-832e-91e484ab0433-image.png

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mrjj
            Lifetime Qt Champion
            wrote on 20 Sept 2018, 08:11 last edited by mrjj
            #13

            HI
            ahh, so 275 is the ID for what SDK is doing.
            So you call
            init_camera(camera); in main window also ?
            (and take_photo(camera,1,1000);
            and camera is a member variable in main window so it doesn't run out of scope?

            but you never see 275 ? in natvieEvent?

            Y 1 Reply Last reply 20 Sept 2018, 09:18
            0
            • M mrjj
              20 Sept 2018, 08:11

              HI
              ahh, so 275 is the ID for what SDK is doing.
              So you call
              init_camera(camera); in main window also ?
              (and take_photo(camera,1,1000);
              and camera is a member variable in main window so it doesn't run out of scope?

              but you never see 275 ? in natvieEvent?

              Y Offline
              Y Offline
              YJCN
              wrote on 20 Sept 2018, 09:18 last edited by
              #14

              @mrjj Yes. I put the code(init_camera(camera) and take_photo(camera,1,1000) ) in Button's slot function, after taking picture, the programm can't enter callback function(handleObjectEvent) and there is no 275 in natvieEvent.

              M 1 Reply Last reply 20 Sept 2018, 09:30
              0
              • Y YJCN
                20 Sept 2018, 09:18

                @mrjj Yes. I put the code(init_camera(camera) and take_photo(camera,1,1000) ) in Button's slot function, after taking picture, the programm can't enter callback function(handleObjectEvent) and there is no 275 in natvieEvent.

                M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 20 Sept 2018, 09:30 last edited by
                #15

                Hi
                and just to be 100% sure
                camera is NOT a local variable in Button's slot function, but in the .h file as a true member of
                main maindiw (in .h file) ?
                (im checking its not a death by scope issue)

                If unsure what i ask, please show full Button's slot function. :)

                Y 1 Reply Last reply 20 Sept 2018, 10:20
                0
                • M mrjj
                  20 Sept 2018, 09:30

                  Hi
                  and just to be 100% sure
                  camera is NOT a local variable in Button's slot function, but in the .h file as a true member of
                  main maindiw (in .h file) ?
                  (im checking its not a death by scope issue)

                  If unsure what i ask, please show full Button's slot function. :)

                  Y Offline
                  Y Offline
                  YJCN
                  wrote on 20 Sept 2018, 10:20 last edited by
                  #16

                  @mrjj This is Button's slot function code

                  void MainWindow::on_pushButton_2_clicked()
                  {
                      EdsCameraRef camera;
                      init_camera(camera);
                      //start_liveview(camera);
                      //TakePicture(camera);
                      take_photo(camera,1,1000);
                      //TakePhoto();
                      //dispose(camera);
                      cout << "before message" << endl;
                      MSG msg;
                      while (::GetMessage(&msg, NULL, NULL, NULL))
                      {
                          TranslateMessage(&msg);
                          DispatchMessage(&msg); // Ends up calling objectEventFnc
                          break;
                      }
                      cout << "after message" << endl;
                      EdsCloseSession(camera);
                      cout << "EdsCloseSession(camera);";
                      EdsTerminateSDK();
                  }
                  
                  
                  J 1 Reply Last reply 20 Sept 2018, 10:36
                  0
                  • Y YJCN
                    20 Sept 2018, 10:20

                    @mrjj This is Button's slot function code

                    void MainWindow::on_pushButton_2_clicked()
                    {
                        EdsCameraRef camera;
                        init_camera(camera);
                        //start_liveview(camera);
                        //TakePicture(camera);
                        take_photo(camera,1,1000);
                        //TakePhoto();
                        //dispose(camera);
                        cout << "before message" << endl;
                        MSG msg;
                        while (::GetMessage(&msg, NULL, NULL, NULL))
                        {
                            TranslateMessage(&msg);
                            DispatchMessage(&msg); // Ends up calling objectEventFnc
                            break;
                        }
                        cout << "after message" << endl;
                        EdsCloseSession(camera);
                        cout << "EdsCloseSession(camera);";
                        EdsTerminateSDK();
                    }
                    
                    
                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 20 Sept 2018, 10:36 last edited by jsulm
                    #17

                    @YJCN said in How to use Windows Message Loop and Qt Application Exec?:

                    while (::GetMessage(&msg, NULL, NULL, NULL))
                    {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg); // Ends up calling objectEventFnc
                    break;
                    }

                    You execute this loop only once (because of the break).
                    Shouldn't you call break after you got the message you need?

                    @mrjj camera is local :-) but I don't thin this is the issue here.

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

                    M J 2 Replies Last reply 20 Sept 2018, 10:59
                    4
                    • J jsulm
                      20 Sept 2018, 10:36

                      @YJCN said in How to use Windows Message Loop and Qt Application Exec?:

                      while (::GetMessage(&msg, NULL, NULL, NULL))
                      {
                      TranslateMessage(&msg);
                      DispatchMessage(&msg); // Ends up calling objectEventFnc
                      break;
                      }

                      You execute this loop only once (because of the break).
                      Shouldn't you call break after you got the message you need?

                      @mrjj camera is local :-) but I don't thin this is the issue here.

                      M Offline
                      M Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on 20 Sept 2018, 10:59 last edited by
                      #18

                      @jsulm
                      I agree, it should not run out of scope if it works like we think :)
                      But you are right, maybe it just get first MSG as then it breaks.

                      1 Reply Last reply
                      0
                      • J jsulm
                        20 Sept 2018, 10:36

                        @YJCN said in How to use Windows Message Loop and Qt Application Exec?:

                        while (::GetMessage(&msg, NULL, NULL, NULL))
                        {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg); // Ends up calling objectEventFnc
                        break;
                        }

                        You execute this loop only once (because of the break).
                        Shouldn't you call break after you got the message you need?

                        @mrjj camera is local :-) but I don't thin this is the issue here.

                        J Online
                        J Online
                        JonB
                        wrote on 20 Sept 2018, 11:39 last edited by
                        #19

                        @YJCN

                        @jsulm said in How to use Windows Message Loop and Qt Application Exec?:

                        Shouldn't you call break after you got the message you need?

                        Indeed, the loop picks up the first message and that's it. What makes you think that message is the right/only one which needs to be processed this way? It could be any old message....

                        Y 1 Reply Last reply 21 Sept 2018, 01:41
                        1
                        • J JonB
                          20 Sept 2018, 11:39

                          @YJCN

                          @jsulm said in How to use Windows Message Loop and Qt Application Exec?:

                          Shouldn't you call break after you got the message you need?

                          Indeed, the loop picks up the first message and that's it. What makes you think that message is the right/only one which needs to be processed this way? It could be any old message....

                          Y Offline
                          Y Offline
                          YJCN
                          wrote on 21 Sept 2018, 01:41 last edited by
                          #20

                          @jsulm @JonB @mrjj Yes, you are right !!! I comment the "break" . It works well!! THANK YOU!☺☺☺☺☺☺☺☺☺☺

                          J 1 Reply Last reply 21 Sept 2018, 06:52
                          3
                          • Y YJCN
                            21 Sept 2018, 01:41

                            @jsulm @JonB @mrjj Yes, you are right !!! I comment the "break" . It works well!! THANK YOU!☺☺☺☺☺☺☺☺☺☺

                            J Online
                            J Online
                            JonB
                            wrote on 21 Sept 2018, 06:52 last edited by
                            #21

                            @YJCN
                            You have to do more than just comment out the break, if that's what you're saying. If that's all you do the ::GetMessage() loop will never exit, and your code will never return from on_pushButton_2_clicked(), e.g. you cannot press it again to take another photo. Presumably you need to find out whatever is the final message your camera issues on taking a photo and exit the loop once that has been received.

                            Y 1 Reply Last reply 22 Sept 2018, 07:17
                            2
                            • J JonB
                              21 Sept 2018, 06:52

                              @YJCN
                              You have to do more than just comment out the break, if that's what you're saying. If that's all you do the ::GetMessage() loop will never exit, and your code will never return from on_pushButton_2_clicked(), e.g. you cannot press it again to take another photo. Presumably you need to find out whatever is the final message your camera issues on taking a photo and exit the loop once that has been received.

                              Y Offline
                              Y Offline
                              YJCN
                              wrote on 22 Sept 2018, 07:17 last edited by
                              #22

                              @JonB Yes. I just use a five times for loop to solve it . ^_^

                              J 1 Reply Last reply 22 Sept 2018, 08:33
                              0
                              • Y YJCN
                                22 Sept 2018, 07:17

                                @JonB Yes. I just use a five times for loop to solve it . ^_^

                                J Online
                                J Online
                                JonB
                                wrote on 22 Sept 2018, 08:33 last edited by
                                #23

                                @YJCN
                                I don't know if your response is serious or amused. Doing it "five times" is very flaky. Isn't there a particular message number you get which you need to wait for to indicate it's now OK to leave the loop?

                                1 Reply Last reply
                                2

                                18/23

                                20 Sept 2018, 10:59

                                • Login

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