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