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.
  • 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