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 7.2k 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 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 Online
          jsulmJ Online
          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 Online
              jsulmJ Online
              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 Online
                  jsulmJ Online
                  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 Online
                      jsulmJ Online
                      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 Online
                          jsulmJ Online
                          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