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

    @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