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 can I move my normal c++ main() function code to qt main function?
Forum Updated to NodeBB v4.3 + New Features

How can I move my normal c++ main() function code to qt main function?

Scheduled Pinned Locked Moved Solved General and Desktop
24 Posts 3 Posters 6.9k 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.
  • A Ashish Tupate

    @jsulm I cant write the main function in qt like this:

    void callback(int way)
    {
       static int pos = 0;
       pos += way;
       std::cout << "pos=" << pos << std::endl;
    } 
    
    int main(int argc, char *argv[])
    {
        if (gpioInitialise() < 0) return 1;
        re_decoder dec(7, 8, callback);
    
        QApplication a(argc, argv);
        Dialog w;
        w.show();
    
        sleep(3000);
        dec.re_cancel();
        gpioTerminate();
    
        return a.exec();
    }
    
    
    
    

    So where can I write this code?

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

    @Ashish-Tupate I'm guessing now what the problem is: you want to execute this code when the app terminates, right?

    dec.re_cancel();
    gpioTerminate();
    

    Then do it like this:

    int main(int argc, char *argv[])
    {
        if (gpioInitialise() < 0) return 1;
        re_decoder dec(7, 8, callback);
    
        QApplication a(argc, argv);
        Dialog w;
        w.show();
    
        int result = a.exec(); // exec() blocks until you close the app
    
        dec.re_cancel();
        gpioTerminate();
    
        return result;
    }

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

    A 1 Reply Last reply
    4
    • jsulmJ jsulm

      @Ashish-Tupate I'm guessing now what the problem is: you want to execute this code when the app terminates, right?

      dec.re_cancel();
      gpioTerminate();
      

      Then do it like this:

      int main(int argc, char *argv[])
      {
          if (gpioInitialise() < 0) return 1;
          re_decoder dec(7, 8, callback);
      
          QApplication a(argc, argv);
          Dialog w;
          w.show();
      
          int result = a.exec(); // exec() blocks until you close the app
      
          dec.re_cancel();
          gpioTerminate();
      
          return result;
      }
      A Offline
      A Offline
      Ashish Tupate
      wrote on last edited by
      #11

      @jsulm Thank you.

      aha_1980A 1 Reply Last reply
      0
      • A Ashish Tupate

        @jsulm Thank you.

        aha_1980A Offline
        aha_1980A Offline
        aha_1980
        Lifetime Qt Champion
        wrote on last edited by aha_1980
        #12

        @Ashish-Tupate said in How can I move my normal c++ main() function code to qt main function?:

        @jsulm Thank you.

        I don't get it. That is the same code I posted this morning (one comment more) and you said it is not what you want...

        Qt has to stay free or it will die.

        A 1 Reply Last reply
        2
        • aha_1980A aha_1980

          @Ashish-Tupate said in How can I move my normal c++ main() function code to qt main function?:

          @jsulm Thank you.

          I don't get it. That is the same code I posted this morning (one comment more) and you said it is not what you want...

          A Offline
          A Offline
          Ashish Tupate
          wrote on last edited by Ashish Tupate
          #13

          @aha_1980 I still didn't get the answer from this forum and the answer by the jsulm is not the expected answer for me. What I want is to write main() as it is like this

          int main(int argc, char *argv[])
          {
             QApplication a(argc, argv);
             MainWindow w;
             w.show();
          
             return a.exec();
          }
          

          and the code inside this

          if (gpioInitialise() < 0) 
                  return 1;
          e_decoder dec(7, 8, callback);
          sleep(50);
          dec.re_cancel();
          gpioTerminate();
          

          and this code

          void callback(int way)
          {
             static int pos = 0;
             pos += way;
             std::cout << "pos=" << pos << std::endl;
          }
          

          I want to write somewhere in other file. Like I can create a new file (ex. test.cpp) and write it down there. So the code should work. Is it possible?I have tried to write the code.
          encodercount.h

          #ifndef ENCODERCOUNT_H
          #define ENCODERCOUNT_H
          
          namespace Encoder {
          class EncoderCount;
          }
          
          class EncoderCount
          {
          public:
              explicit EncoderCount();
              ~EncoderCount();
              int pigpiotest();
          
          private:
              static void callback(int way);
          };
          

          encodercount.cpp

          #include <pigpio.h>
          #include "rotary_encoder.hpp"
          #include <iostream>
          #include <stdio.h>
          #include <unistd.h>
          
          static int pos = 0;
          void EncoderCount::callback(int way)
          {
                 pos += way;
                 qDebug() << "pos=" << pos ;
          }
           int EncoderCount::pigpiotest()
           {
               if (gpioInitialise() < 0) return 1;
          
               re_decoder dec(8, 11, callback);
          
               sleep(50);
          
               dec.re_cancel();
          
               gpioTerminate();
          
           }
          

          Still no output.

          aha_1980A jsulmJ 2 Replies Last reply
          0
          • A Ashish Tupate

            @aha_1980 I still didn't get the answer from this forum and the answer by the jsulm is not the expected answer for me. What I want is to write main() as it is like this

            int main(int argc, char *argv[])
            {
               QApplication a(argc, argv);
               MainWindow w;
               w.show();
            
               return a.exec();
            }
            

            and the code inside this

            if (gpioInitialise() < 0) 
                    return 1;
            e_decoder dec(7, 8, callback);
            sleep(50);
            dec.re_cancel();
            gpioTerminate();
            

            and this code

            void callback(int way)
            {
               static int pos = 0;
               pos += way;
               std::cout << "pos=" << pos << std::endl;
            }
            

            I want to write somewhere in other file. Like I can create a new file (ex. test.cpp) and write it down there. So the code should work. Is it possible?I have tried to write the code.
            encodercount.h

            #ifndef ENCODERCOUNT_H
            #define ENCODERCOUNT_H
            
            namespace Encoder {
            class EncoderCount;
            }
            
            class EncoderCount
            {
            public:
                explicit EncoderCount();
                ~EncoderCount();
                int pigpiotest();
            
            private:
                static void callback(int way);
            };
            

            encodercount.cpp

            #include <pigpio.h>
            #include "rotary_encoder.hpp"
            #include <iostream>
            #include <stdio.h>
            #include <unistd.h>
            
            static int pos = 0;
            void EncoderCount::callback(int way)
            {
                   pos += way;
                   qDebug() << "pos=" << pos ;
            }
             int EncoderCount::pigpiotest()
             {
                 if (gpioInitialise() < 0) return 1;
            
                 re_decoder dec(8, 11, callback);
            
                 sleep(50);
            
                 dec.re_cancel();
            
                 gpioTerminate();
            
             }
            

            Still no output.

            aha_1980A Offline
            aha_1980A Offline
            aha_1980
            Lifetime Qt Champion
            wrote on last edited by
            #14

            @Ashish-Tupate said in How can I move my normal c++ main() function code to qt main function?:

            So the code should work. Is it possible?

            Yes, of course this is possible - it's a very common task for C++ programmers.

            But did you actually try what I and @jsulm suggested you? I wrote "as a starting point". This should work with minimum change to your existing program.

            If you want the code to reside in a separate file, you will have to refactor it. The sleep can not be used in Qt GUI programs! You can create the functions in a new file decoder.cpp:

            void callback()
            {
                //...
            }
            
            void initDecoder()
            {
                if (gpioInitialise() < 0) 
                    return 1;
                 e_decoder dec(7, 8, callback);
            }
            
            void stopDecoder()
            {
                dec.re_cancel();
                gpioTerminate();
            }
            

            and then call them, for example from main::

            #include "decoder.h"
            
            int main(int argc, char *argv[])
            {
                initEncoder();
            
                QApplication a(argc, argv);
                Dialog w;
                w.show();
            
                int result = a.exec(); // exec() blocks until you close the app
            
                stopEncoder();
            
                return result;
            }
            

            But better try the examples we gave you yesterday first.

            Qt has to stay free or it will die.

            1 Reply Last reply
            2
            • A Ashish Tupate

              @aha_1980 I still didn't get the answer from this forum and the answer by the jsulm is not the expected answer for me. What I want is to write main() as it is like this

              int main(int argc, char *argv[])
              {
                 QApplication a(argc, argv);
                 MainWindow w;
                 w.show();
              
                 return a.exec();
              }
              

              and the code inside this

              if (gpioInitialise() < 0) 
                      return 1;
              e_decoder dec(7, 8, callback);
              sleep(50);
              dec.re_cancel();
              gpioTerminate();
              

              and this code

              void callback(int way)
              {
                 static int pos = 0;
                 pos += way;
                 std::cout << "pos=" << pos << std::endl;
              }
              

              I want to write somewhere in other file. Like I can create a new file (ex. test.cpp) and write it down there. So the code should work. Is it possible?I have tried to write the code.
              encodercount.h

              #ifndef ENCODERCOUNT_H
              #define ENCODERCOUNT_H
              
              namespace Encoder {
              class EncoderCount;
              }
              
              class EncoderCount
              {
              public:
                  explicit EncoderCount();
                  ~EncoderCount();
                  int pigpiotest();
              
              private:
                  static void callback(int way);
              };
              

              encodercount.cpp

              #include <pigpio.h>
              #include "rotary_encoder.hpp"
              #include <iostream>
              #include <stdio.h>
              #include <unistd.h>
              
              static int pos = 0;
              void EncoderCount::callback(int way)
              {
                     pos += way;
                     qDebug() << "pos=" << pos ;
              }
               int EncoderCount::pigpiotest()
               {
                   if (gpioInitialise() < 0) return 1;
              
                   re_decoder dec(8, 11, callback);
              
                   sleep(50);
              
                   dec.re_cancel();
              
                   gpioTerminate();
              
               }
              

              Still no output.

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

              @Ashish-Tupate said in How can I move my normal c++ main() function code to qt main function?:

              Is it possible?

              Sure it is, why not?

              The code you put in test.cpp - is it called somewhere? I mean: do you use class EncoderCount somewhere? You're using a member function (method) as a callback - this will not work as you need a function.

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

              A 1 Reply Last reply
              1
              • jsulmJ jsulm

                @Ashish-Tupate said in How can I move my normal c++ main() function code to qt main function?:

                Is it possible?

                Sure it is, why not?

                The code you put in test.cpp - is it called somewhere? I mean: do you use class EncoderCount somewhere? You're using a member function (method) as a callback - this will not work as you need a function.

                A Offline
                A Offline
                Ashish Tupate
                wrote on last edited by
                #16

                @jsulm test.cpp is encodercount.cpp and yes it is not working.

                jsulmJ 1 Reply Last reply
                0
                • A Ashish Tupate

                  @jsulm test.cpp is encodercount.cpp and yes it is not working.

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

                  @Ashish-Tupate What is not working? Can you please describe the problem clearly? Post the error message?

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

                  A 1 Reply Last reply
                  1
                  • jsulmJ jsulm

                    @Ashish-Tupate What is not working? Can you please describe the problem clearly? Post the error message?

                    A Offline
                    A Offline
                    Ashish Tupate
                    wrote on last edited by Ashish Tupate
                    #18

                    @jsulm my main.cpp file look like this

                    #include "encodercount.h"
                    
                    using namespace std;
                    
                    int main(int argc, char *argv[])
                    {
                        initEncoder();
                    
                        QApplication app(argc, argv);
                        Dialog w;
                        w.show();
                    
                        int result = a.exec(); // exec() blocks until you close the app
                        stopEncoder();
                    
                        return app.exec();
                    }
                    

                    and encodercount.h

                    #ifndef ENCODERCOUNT_H
                    #define ENCODERCOUNT_H
                    
                    #include <rotary_encoder.hpp>
                    
                    
                    namespace Encoder {
                    class EncoderCount;
                    }
                    
                    class EncoderCount
                    {
                    public:
                        explicit EncoderCount();
                        ~EncoderCount();
                    
                        void initDecoder();
                        void stopDecoder();
                    
                    };
                    
                    
                    #endif // ENCODERCOUNT_H
                    
                    

                    encodercount.cpp

                    void callback(int way)
                    {
                        cout << " callback"<< endl;
                    
                        static int pos = 0;
                    
                           pos += way;
                           qDebug() << "pos=" << pos ;
                    }
                    
                    void initDecoder()
                     {
                         cout << "pigpio test"<< endl;
                    
                         if (gpioInitialise() < 0) return 1;
                    
                         re_decoder dec(8, 11, callback);
                    
                     }
                    
                     void stopDecoder()
                     {
                         dec.re_cancel();
                         gpioTerminate();
                     }
                    

                    and I am getting error :
                    'initEncoder' was not declared in this scope
                    initEncoder();
                    ^
                    'a' was not declared in this scope
                    int result = a.exec(); // exec() blocks until you close the app
                    ^
                    'stopEncoder' was not declared in this scope
                    stopEncoder();
                    ^

                    jsulmJ 1 Reply Last reply
                    0
                    • A Ashish Tupate

                      @jsulm my main.cpp file look like this

                      #include "encodercount.h"
                      
                      using namespace std;
                      
                      int main(int argc, char *argv[])
                      {
                          initEncoder();
                      
                          QApplication app(argc, argv);
                          Dialog w;
                          w.show();
                      
                          int result = a.exec(); // exec() blocks until you close the app
                          stopEncoder();
                      
                          return app.exec();
                      }
                      

                      and encodercount.h

                      #ifndef ENCODERCOUNT_H
                      #define ENCODERCOUNT_H
                      
                      #include <rotary_encoder.hpp>
                      
                      
                      namespace Encoder {
                      class EncoderCount;
                      }
                      
                      class EncoderCount
                      {
                      public:
                          explicit EncoderCount();
                          ~EncoderCount();
                      
                          void initDecoder();
                          void stopDecoder();
                      
                      };
                      
                      
                      #endif // ENCODERCOUNT_H
                      
                      

                      encodercount.cpp

                      void callback(int way)
                      {
                          cout << " callback"<< endl;
                      
                          static int pos = 0;
                      
                             pos += way;
                             qDebug() << "pos=" << pos ;
                      }
                      
                      void initDecoder()
                       {
                           cout << "pigpio test"<< endl;
                      
                           if (gpioInitialise() < 0) return 1;
                      
                           re_decoder dec(8, 11, callback);
                      
                       }
                      
                       void stopDecoder()
                       {
                           dec.re_cancel();
                           gpioTerminate();
                       }
                      

                      and I am getting error :
                      'initEncoder' was not declared in this scope
                      initEncoder();
                      ^
                      'a' was not declared in this scope
                      int result = a.exec(); // exec() blocks until you close the app
                      ^
                      'stopEncoder' was not declared in this scope
                      stopEncoder();
                      ^

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

                      @Ashish-Tupate Add initEncoder(); and stopEncoder(); to encodercount.h.

                      Change

                      int result = a.exec();
                      

                      to

                      int result = app.exec();
                      

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

                      A 1 Reply Last reply
                      0
                      • jsulmJ jsulm

                        @Ashish-Tupate Add initEncoder(); and stopEncoder(); to encodercount.h.

                        Change

                        int result = a.exec();
                        

                        to

                        int result = app.exec();
                        
                        A Offline
                        A Offline
                        Ashish Tupate
                        wrote on last edited by
                        #20

                        @jsulm I dont know why but this error again even if these functions are inside encodercount.h:

                        'initEncoder' was not declared in this scope
                        initEncoder();
                        ^
                        'stopEncoder' was not declared in this scope
                        stopEncoder();
                        ^

                        #ifndef ENCODERCOUNT_H
                        #define ENCODERCOUNT_H
                        #include <rotary_encoder.hpp>
                        
                        
                        namespace Encoder {
                        class EncoderCount;
                        }
                        
                        class EncoderCount
                        {
                        public:
                            explicit EncoderCount();
                            ~EncoderCount();
                        
                            void initEncoder();
                            void stopEncoder();
                        
                        };
                        
                        
                        #endif // ENCODERCOUNT_H
                        
                        
                        jsulmJ 1 Reply Last reply
                        0
                        • A Ashish Tupate

                          @jsulm I dont know why but this error again even if these functions are inside encodercount.h:

                          'initEncoder' was not declared in this scope
                          initEncoder();
                          ^
                          'stopEncoder' was not declared in this scope
                          stopEncoder();
                          ^

                          #ifndef ENCODERCOUNT_H
                          #define ENCODERCOUNT_H
                          #include <rotary_encoder.hpp>
                          
                          
                          namespace Encoder {
                          class EncoderCount;
                          }
                          
                          class EncoderCount
                          {
                          public:
                              explicit EncoderCount();
                              ~EncoderCount();
                          
                              void initEncoder();
                              void stopEncoder();
                          
                          };
                          
                          
                          #endif // ENCODERCOUNT_H
                          
                          
                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #21

                          @Ashish-Tupate Please think about what you are doing: you put both functions inside EncoderCount class! And then you try to call them as if they would be simple functions.
                          You should learn C++.
                          It should be like this:

                          #ifndef ENCODERCOUNT_H
                          #define ENCODERCOUNT_H
                          #include <rotary_encoder.hpp>
                          
                          void initEncoder();
                          void stopEncoder();
                          

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

                          A 1 Reply Last reply
                          2
                          • jsulmJ jsulm

                            @Ashish-Tupate Please think about what you are doing: you put both functions inside EncoderCount class! And then you try to call them as if they would be simple functions.
                            You should learn C++.
                            It should be like this:

                            #ifndef ENCODERCOUNT_H
                            #define ENCODERCOUNT_H
                            #include <rotary_encoder.hpp>
                            
                            void initEncoder();
                            void stopEncoder();
                            
                            A Offline
                            A Offline
                            Ashish Tupate
                            wrote on last edited by
                            #22

                            @jsulm Yes you are right but you have to help me out.Again I got the error :
                            return-statement with a value, in function returning 'void' [-fpermissive]
                            if (gpioInitialise() < 0) return 1;
                            ^

                            jsulmJ 1 Reply Last reply
                            0
                            • A Ashish Tupate

                              @jsulm Yes you are right but you have to help me out.Again I got the error :
                              return-statement with a value, in function returning 'void' [-fpermissive]
                              if (gpioInitialise() < 0) return 1;
                              ^

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

                              @Ashish-Tupate "but you have to help me out" - no I don't have to.
                              You should really learn C++ and read the error messages carefully. What you are asking is completely unrelated to Qt.
                              Change

                              if (gpioInitialise() < 0) return 1;
                              

                              to

                              if (gpioInitialise() < 0) return;
                              

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

                              A 1 Reply Last reply
                              2
                              • jsulmJ jsulm

                                @Ashish-Tupate "but you have to help me out" - no I don't have to.
                                You should really learn C++ and read the error messages carefully. What you are asking is completely unrelated to Qt.
                                Change

                                if (gpioInitialise() < 0) return 1;
                                

                                to

                                if (gpioInitialise() < 0) return;
                                
                                A Offline
                                A Offline
                                Ashish Tupate
                                wrote on last edited by Ashish Tupate
                                #24

                                @jsulm Thank you for your help.

                                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