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 to use methods of an object from a different class?
Forum Updated to NodeBB v4.3 + New Features

How to use methods of an object from a different class?

Scheduled Pinned Locked Moved Solved General and Desktop
29 Posts 4 Posters 7.5k Views
  • 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.
  • B Offline
    B Offline
    bask185
    wrote on last edited by
    #11

    @jsulm said in How to use methods of an object from a different class?:

    Aren't you missing a comma?

    That is what I thought as well, but no. Adding comma will give errors

    @jsulm said in How to use methods of an object from a different class?:

    Please do NOT do this in the constructor: kBoard would be a local variable and would disappear when the constructor finishes!

    at first I used Keyboard *keyboard = new Keyboard(); with those strange pointer things. Now I declare keyboard with the rest of my variables and I initialize it in the constructor.

    @J.Hilk said in How to use methods of an object from a different class?:

    ust noticed, your Send-Function wants a char and you send a QString that will most likly not work

    I also noticed that and changed it already.

    There are a few more things I found out. I was using 'keyboard' at first, but that turns red so it might interfere. I swapped out 'keyboard' for Kboard. But my way of decalaring it in the variable section and initializing it in the constructor suddenly upset the compiler so I went back to the constructor and now I have:

    Keyboard *Kboard = new Keyboard();
       connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
    

    also in keyboard.h I changed private by public because I was getting an error message there at first.

    But I am still having this error in the connect function:

    C:\Users\sknippels\Documents\GUI\mainwindow.cpp:51: error: invalid use of member (did you forget the '&' ?)
        connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                                                                 ^
    

    how my code looks like atm:

    Keyboard *Kboard = new Keyboard();  // mainwindow.cpp constructor
       connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
    
    void MainWindow::send(QString c)  // send function in mainwindow.ccp
    {
      serial->write("c"); // still does not send the value of c, just "c"
      qDebug() << c;
    }
    
    void Keyboard::on_a_clicked() // push button function in keyboard.cpp
    {
       QString c;
       c = ui->a->text();
       emit KeyPressed(c);
       }
    
    public slots: // keyboard.h
        void KeyPressed(QString c); // also tried KeyPressed(QString); and KeyPressed(); no effect
    }
    
    private slots: //mainwindow.h
        void serialReceived(); // one of many other functions
        void send(QString c);
    
    

    I think we have all the pieces of this strange C++ puzzle now

    jsulmJ J.HilkJ 2 Replies Last reply
    0
    • B bask185

      @jsulm said in How to use methods of an object from a different class?:

      Aren't you missing a comma?

      That is what I thought as well, but no. Adding comma will give errors

      @jsulm said in How to use methods of an object from a different class?:

      Please do NOT do this in the constructor: kBoard would be a local variable and would disappear when the constructor finishes!

      at first I used Keyboard *keyboard = new Keyboard(); with those strange pointer things. Now I declare keyboard with the rest of my variables and I initialize it in the constructor.

      @J.Hilk said in How to use methods of an object from a different class?:

      ust noticed, your Send-Function wants a char and you send a QString that will most likly not work

      I also noticed that and changed it already.

      There are a few more things I found out. I was using 'keyboard' at first, but that turns red so it might interfere. I swapped out 'keyboard' for Kboard. But my way of decalaring it in the variable section and initializing it in the constructor suddenly upset the compiler so I went back to the constructor and now I have:

      Keyboard *Kboard = new Keyboard();
         connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
      

      also in keyboard.h I changed private by public because I was getting an error message there at first.

      But I am still having this error in the connect function:

      C:\Users\sknippels\Documents\GUI\mainwindow.cpp:51: error: invalid use of member (did you forget the '&' ?)
          connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                                                                   ^
      

      how my code looks like atm:

      Keyboard *Kboard = new Keyboard();  // mainwindow.cpp constructor
         connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
      
      void MainWindow::send(QString c)  // send function in mainwindow.ccp
      {
        serial->write("c"); // still does not send the value of c, just "c"
        qDebug() << c;
      }
      
      void Keyboard::on_a_clicked() // push button function in keyboard.cpp
      {
         QString c;
         c = ui->a->text();
         emit KeyPressed(c);
         }
      
      public slots: // keyboard.h
          void KeyPressed(QString c); // also tried KeyPressed(QString); and KeyPressed(); no effect
      }
      
      private slots: //mainwindow.h
          void serialReceived(); // one of many other functions
          void send(QString c);
      
      

      I think we have all the pieces of this strange C++ puzzle now

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

      @bask185 You're still missing the comma, please add it as it is needed. And if you then still get an error then please post it here: just saying there is an error does not help.

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

      B 1 Reply Last reply
      0
      • B bask185

        @jsulm said in How to use methods of an object from a different class?:

        Aren't you missing a comma?

        That is what I thought as well, but no. Adding comma will give errors

        @jsulm said in How to use methods of an object from a different class?:

        Please do NOT do this in the constructor: kBoard would be a local variable and would disappear when the constructor finishes!

        at first I used Keyboard *keyboard = new Keyboard(); with those strange pointer things. Now I declare keyboard with the rest of my variables and I initialize it in the constructor.

        @J.Hilk said in How to use methods of an object from a different class?:

        ust noticed, your Send-Function wants a char and you send a QString that will most likly not work

        I also noticed that and changed it already.

        There are a few more things I found out. I was using 'keyboard' at first, but that turns red so it might interfere. I swapped out 'keyboard' for Kboard. But my way of decalaring it in the variable section and initializing it in the constructor suddenly upset the compiler so I went back to the constructor and now I have:

        Keyboard *Kboard = new Keyboard();
           connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
        

        also in keyboard.h I changed private by public because I was getting an error message there at first.

        But I am still having this error in the connect function:

        C:\Users\sknippels\Documents\GUI\mainwindow.cpp:51: error: invalid use of member (did you forget the '&' ?)
            connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                                                                     ^
        

        how my code looks like atm:

        Keyboard *Kboard = new Keyboard();  // mainwindow.cpp constructor
           connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
        
        void MainWindow::send(QString c)  // send function in mainwindow.ccp
        {
          serial->write("c"); // still does not send the value of c, just "c"
          qDebug() << c;
        }
        
        void Keyboard::on_a_clicked() // push button function in keyboard.cpp
        {
           QString c;
           c = ui->a->text();
           emit KeyPressed(c);
           }
        
        public slots: // keyboard.h
            void KeyPressed(QString c); // also tried KeyPressed(QString); and KeyPressed(); no effect
        }
        
        private slots: //mainwindow.h
            void serialReceived(); // one of many other functions
            void send(QString c);
        
        

        I think we have all the pieces of this strange C++ puzzle now

        J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by
        #13

        @bask185

        additionally to what @jsulm said,

        
        public slots: // keyboard.h
            void KeyPressed(QString c); // also tried KeyPressed(QString); and KeyPressed(); no effect
        
        

        ought to be a signal

        signals: // keyboard.h
            void KeyPressed(QString c); // also tried KeyPressed(QString); and KeyPressed(); no effect
        
        

        not a slot


        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        1 Reply Last reply
        1
        • jsulmJ jsulm

          @bask185 You're still missing the comma, please add it as it is needed. And if you then still get an error then please post it here: just saying there is an error does not help.

          B Offline
          B Offline
          bask185
          wrote on last edited by
          #14

          @jsulm said in How to use methods of an object from a different class?:

          @bask185 You're still missing the comma, please add it as it is needed. And if you then still get an error then please post it here: just saying there is an error does not help.

          Keyboard *Kboard = new Keyboard();
             //connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
             connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
          

          V

          C:\Users\sknippels\Documents\GUI\mainwindow.cpp:52: error: undefined reference to `Keyboard::KeyPressed(QString)'
          
          C:\Users\sknippels\Documents\GUI\keyboard.cpp:76: error: undefined reference to `Keyboard::KeyPressed(QString)'
          
          C:\Users\sknippels\Documents\build-GUI-Desktop_Qt_5_8_0_MinGW_32bit-Debug\debug\moc_keyboard.cpp:251: error: undefined reference to `Keyboard::KeyPressed(QString)'
          
          collect2.exe:-1: error: error: ld returned 1 exit status
          
          jsulmJ 1 Reply Last reply
          0
          • B bask185

            @jsulm said in How to use methods of an object from a different class?:

            @bask185 You're still missing the comma, please add it as it is needed. And if you then still get an error then please post it here: just saying there is an error does not help.

            Keyboard *Kboard = new Keyboard();
               //connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
               connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
            

            V

            C:\Users\sknippels\Documents\GUI\mainwindow.cpp:52: error: undefined reference to `Keyboard::KeyPressed(QString)'
            
            C:\Users\sknippels\Documents\GUI\keyboard.cpp:76: error: undefined reference to `Keyboard::KeyPressed(QString)'
            
            C:\Users\sknippels\Documents\build-GUI-Desktop_Qt_5_8_0_MinGW_32bit-Debug\debug\moc_keyboard.cpp:251: error: undefined reference to `Keyboard::KeyPressed(QString)'
            
            collect2.exe:-1: error: error: ld returned 1 exit status
            
            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #15

            @bask185 Please read what @J-Hilk wrote

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

            B 1 Reply Last reply
            0
            • jsulmJ jsulm

              @bask185 Please read what @J-Hilk wrote

              B Offline
              B Offline
              bask185
              wrote on last edited by
              #16

              @jsulm said in How to use methods of an object from a different class?:

              @bask185 Please read what @J-Hilk wrote

              I did and changed it and I can finally atleast build it. only pressing the 'a' on the keyboard does not do anything.

              I know that void Keyboard::on_a_clicked() gets executed using Qdebug I can also tell c has the correct value.

              But in mainwindow void MainWindow::send(QString c) does not get executed. I added qDebug() << "hello world"; but nothing happens :(

              jsulmJ 1 Reply Last reply
              0
              • B bask185

                @jsulm said in How to use methods of an object from a different class?:

                @bask185 Please read what @J-Hilk wrote

                I did and changed it and I can finally atleast build it. only pressing the 'a' on the keyboard does not do anything.

                I know that void Keyboard::on_a_clicked() gets executed using Qdebug I can also tell c has the correct value.

                But in mainwindow void MainWindow::send(QString c) does not get executed. I added qDebug() << "hello world"; but nothing happens :(

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

                @bask185 Can you show the whole code where

                Keyboard *Kboard = new Keyboard();
                   //connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                   connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                

                is embedded?

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

                B 1 Reply Last reply
                0
                • jsulmJ jsulm

                  @bask185 Can you show the whole code where

                  Keyboard *Kboard = new Keyboard();
                     //connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                     connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                  

                  is embedded?

                  B Offline
                  B Offline
                  bask185
                  wrote on last edited by
                  #18

                  @jsulm said in How to use methods of an object from a different class?:

                  @bask185 Can you show the whole code where

                  Keyboard *Kboard = new Keyboard();
                     //connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                     connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                  

                  is embedded?
                  I don't know what you mean??

                  I moved Keyboard *Kboard; to the global variables of mainwindow but it seems that does not make a difference. Button 'a' of the keyboard still does not trigger the send function in the main window

                  jsulmJ J.HilkJ 2 Replies Last reply
                  0
                  • B bask185

                    @jsulm said in How to use methods of an object from a different class?:

                    @bask185 Can you show the whole code where

                    Keyboard *Kboard = new Keyboard();
                       //connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                       connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                    

                    is embedded?
                    I don't know what you mean??

                    I moved Keyboard *Kboard; to the global variables of mainwindow but it seems that does not make a difference. Button 'a' of the keyboard still does not trigger the send function in the main window

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

                    @bask185 Can you please post your code? Else I don't know what is wrong.

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

                    1 Reply Last reply
                    0
                    • B bask185

                      @jsulm said in How to use methods of an object from a different class?:

                      @bask185 Can you show the whole code where

                      Keyboard *Kboard = new Keyboard();
                         //connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                         connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                      

                      is embedded?
                      I don't know what you mean??

                      I moved Keyboard *Kboard; to the global variables of mainwindow but it seems that does not make a difference. Button 'a' of the keyboard still does not trigger the send function in the main window

                      J.HilkJ Offline
                      J.HilkJ Offline
                      J.Hilk
                      Moderators
                      wrote on last edited by
                      #20

                      @bask185

                      what @jsulm meant, is, can you post the whole content between the brackets {} where

                      Keyboard *Kboard = new Keyboard();
                         //connect(Kboard, &Keyboard::KeyPressed, this &MainWindow::send);
                         connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                      

                      is copied out of.


                      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                      Q: What's that?
                      A: It's blue light.
                      Q: What does it do?
                      A: It turns blue.

                      1 Reply Last reply
                      0
                      • B Offline
                        B Offline
                        bask185
                        wrote on last edited by
                        #21

                        The one with the comma remains ;)

                        #include "mainwindow.h" // mainwindow.cpp
                        #include "ui_mainwindow.h"
                        #include <QPixmap>
                        #include <QDebug>
                        #include <QPalette>
                        #include <QtSerialPort>
                        #include "keyboard.h"
                        #include "numpad.h"
                        QSerialPort *serial;
                        void readCommand();
                        
                        char lettres[5][40][16];     // initializes all to be used variables;
                        int index1 = 0;
                        int index2 = 0;
                        int colom[5];
                        int row[5];
                        int colorIndex[5];
                        char c;
                        Keyboard *Kboard;
                        
                        MainWindow::MainWindow(QWidget *parent) :
                            QMainWindow(parent),
                            ui(new Ui::MainWindow)
                        {
                            ui->setupUi(this);
                            serial = new QSerialPort();
                            serial->setPortName("COM4");
                            serial->open(QIODevice::ReadWrite);
                            serial->setBaudRate(QSerialPort::Baud115200);
                            serial->setDataBits(QSerialPort::Data8);
                            serial->setParity(QSerialPort::OddParity);
                            serial->setStopBits(QSerialPort::OneStop);
                            //serial.setFlowControl(QSerialPort::NoFlowControl);
                            //serial.open(QIODevice::ReadWrite);
                        
                            QPixmap logo(":/resources/img/logo.jpg");
                            int w = ui->label->width();
                            int h = ui->label->height();
                            ui->label->setPixmap(logo.scaled(w,h,Qt::KeepAspectRatio));
                        
                            for(int i=0;i<5;i++) {
                                for (int j=0;j<40;j++) {
                                    for (int k=0;k<16;k++){
                                        lettres[i][j][k] =' ';   // initializes the letters array
                                    }
                                }
                            }
                           connect(serial, &QSerialPort::readyRead, this, &MainWindow::serialReceived);
                        
                           Kboard = new Keyboard();
                           connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                        }
                        
                        MainWindow::~MainWindow()
                        {
                           delete ui;
                        }
                        
                        void MainWindow::serialReceived()
                        {
                            QByteArray b = serial->readAll();
                            qDebug() << b;
                        }
                        
                        void MainWindow::send(QString c)
                        {
                          serial->write("c");
                          qDebug() << "hello world " << c;
                        }
                        
                        #include "keyboard.h" //keyboard.cpp
                        #include "ui_keyboard.h"
                        #include <QtSerialPort>
                        #include "mainwindow.h"
                        
                        
                        bool caps = true, shift = true;
                        
                        Keyboard::Keyboard(QWidget *parent) :
                            QDialog(parent),
                            ui(new Ui::Keyboard)
                        
                        {
                            ui->setupUi(this);
                        }
                        
                        Keyboard::~Keyboard()
                        {
                            delete ui;
                        }
                        
                        void Keyboard::on_a_clicked()
                        {
                           QString c;
                           c = ui->a->text();
                           emit KeyPressed(c);
                           qDebug() << c;
                        
                           if(caps == true && shift == false){ // disables the effect of the shift key when any lettre has been pressed.
                               shift = false;
                               on_shift1_clicked();
                           }
                        }
                        
                        #ifndef MAINWINDOW_H //main window.h
                        #define MAINWINDOW_H
                        
                        #include <QMainWindow>
                        #include "keyboard.h"
                        #include "numpad.h"
                        
                        
                        namespace Ui {
                        class MainWindow;
                        }
                        
                        class MainWindow : public QMainWindow
                        {
                            Q_OBJECT
                        
                        public:
                            explicit MainWindow(QWidget *parent = 0);
                            ~MainWindow();
                        
                        private slots:
                            void send(QString c);
                        
                        private:
                            Ui::MainWindow *ui;
                            Keyboard *keyboard;
                            Numpad *numpad;
                        };
                        
                        #endif // MAINWINDOW_H
                        
                        #ifndef KEYBOARD_H
                        #define KEYBOARD_H
                        
                        #include <QDialog>
                        
                        namespace Ui {  //keyboard.h
                        class Keyboard;
                        }
                        
                        class Keyboard : public QDialog
                        {
                            Q_OBJECT
                        
                        public:
                            explicit Keyboard(QWidget *parent = 0);
                            ~Keyboard();
                        signals:
                            void KeyPressed(QString);
                        
                        private slots:
                            void on_a_clicked();
                            
                        
                        private:
                            Ui::Keyboard *ui;
                        };
                        
                        #endif // KEYBOARD_H
                        
                        jsulmJ J.HilkJ 3 Replies Last reply
                        0
                        • B bask185

                          The one with the comma remains ;)

                          #include "mainwindow.h" // mainwindow.cpp
                          #include "ui_mainwindow.h"
                          #include <QPixmap>
                          #include <QDebug>
                          #include <QPalette>
                          #include <QtSerialPort>
                          #include "keyboard.h"
                          #include "numpad.h"
                          QSerialPort *serial;
                          void readCommand();
                          
                          char lettres[5][40][16];     // initializes all to be used variables;
                          int index1 = 0;
                          int index2 = 0;
                          int colom[5];
                          int row[5];
                          int colorIndex[5];
                          char c;
                          Keyboard *Kboard;
                          
                          MainWindow::MainWindow(QWidget *parent) :
                              QMainWindow(parent),
                              ui(new Ui::MainWindow)
                          {
                              ui->setupUi(this);
                              serial = new QSerialPort();
                              serial->setPortName("COM4");
                              serial->open(QIODevice::ReadWrite);
                              serial->setBaudRate(QSerialPort::Baud115200);
                              serial->setDataBits(QSerialPort::Data8);
                              serial->setParity(QSerialPort::OddParity);
                              serial->setStopBits(QSerialPort::OneStop);
                              //serial.setFlowControl(QSerialPort::NoFlowControl);
                              //serial.open(QIODevice::ReadWrite);
                          
                              QPixmap logo(":/resources/img/logo.jpg");
                              int w = ui->label->width();
                              int h = ui->label->height();
                              ui->label->setPixmap(logo.scaled(w,h,Qt::KeepAspectRatio));
                          
                              for(int i=0;i<5;i++) {
                                  for (int j=0;j<40;j++) {
                                      for (int k=0;k<16;k++){
                                          lettres[i][j][k] =' ';   // initializes the letters array
                                      }
                                  }
                              }
                             connect(serial, &QSerialPort::readyRead, this, &MainWindow::serialReceived);
                          
                             Kboard = new Keyboard();
                             connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                          }
                          
                          MainWindow::~MainWindow()
                          {
                             delete ui;
                          }
                          
                          void MainWindow::serialReceived()
                          {
                              QByteArray b = serial->readAll();
                              qDebug() << b;
                          }
                          
                          void MainWindow::send(QString c)
                          {
                            serial->write("c");
                            qDebug() << "hello world " << c;
                          }
                          
                          #include "keyboard.h" //keyboard.cpp
                          #include "ui_keyboard.h"
                          #include <QtSerialPort>
                          #include "mainwindow.h"
                          
                          
                          bool caps = true, shift = true;
                          
                          Keyboard::Keyboard(QWidget *parent) :
                              QDialog(parent),
                              ui(new Ui::Keyboard)
                          
                          {
                              ui->setupUi(this);
                          }
                          
                          Keyboard::~Keyboard()
                          {
                              delete ui;
                          }
                          
                          void Keyboard::on_a_clicked()
                          {
                             QString c;
                             c = ui->a->text();
                             emit KeyPressed(c);
                             qDebug() << c;
                          
                             if(caps == true && shift == false){ // disables the effect of the shift key when any lettre has been pressed.
                                 shift = false;
                                 on_shift1_clicked();
                             }
                          }
                          
                          #ifndef MAINWINDOW_H //main window.h
                          #define MAINWINDOW_H
                          
                          #include <QMainWindow>
                          #include "keyboard.h"
                          #include "numpad.h"
                          
                          
                          namespace Ui {
                          class MainWindow;
                          }
                          
                          class MainWindow : public QMainWindow
                          {
                              Q_OBJECT
                          
                          public:
                              explicit MainWindow(QWidget *parent = 0);
                              ~MainWindow();
                          
                          private slots:
                              void send(QString c);
                          
                          private:
                              Ui::MainWindow *ui;
                              Keyboard *keyboard;
                              Numpad *numpad;
                          };
                          
                          #endif // MAINWINDOW_H
                          
                          #ifndef KEYBOARD_H
                          #define KEYBOARD_H
                          
                          #include <QDialog>
                          
                          namespace Ui {  //keyboard.h
                          class Keyboard;
                          }
                          
                          class Keyboard : public QDialog
                          {
                              Q_OBJECT
                          
                          public:
                              explicit Keyboard(QWidget *parent = 0);
                              ~Keyboard();
                          signals:
                              void KeyPressed(QString);
                          
                          private slots:
                              void on_a_clicked();
                              
                          
                          private:
                              Ui::Keyboard *ui;
                          };
                          
                          #endif // KEYBOARD_H
                          
                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #22

                          @bask185 One note: why do you use global variables? This is bad habit!
                          For example Kboard should be a member variable of your MainWindow class.

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

                          1 Reply Last reply
                          0
                          • B Offline
                            B Offline
                            bask185
                            wrote on last edited by
                            #23

                            idk to get it to work I suppose, but I should declare it in the constructor above the connect function??

                            In processing I sometimes use global variables because I can acces and modify them in every class I write. In Qt I know very little of what the firetruck I am doing. I do know that in Qt it is a lot more work to get an exact same application than in processing..

                            E 1 Reply Last reply
                            0
                            • B bask185

                              The one with the comma remains ;)

                              #include "mainwindow.h" // mainwindow.cpp
                              #include "ui_mainwindow.h"
                              #include <QPixmap>
                              #include <QDebug>
                              #include <QPalette>
                              #include <QtSerialPort>
                              #include "keyboard.h"
                              #include "numpad.h"
                              QSerialPort *serial;
                              void readCommand();
                              
                              char lettres[5][40][16];     // initializes all to be used variables;
                              int index1 = 0;
                              int index2 = 0;
                              int colom[5];
                              int row[5];
                              int colorIndex[5];
                              char c;
                              Keyboard *Kboard;
                              
                              MainWindow::MainWindow(QWidget *parent) :
                                  QMainWindow(parent),
                                  ui(new Ui::MainWindow)
                              {
                                  ui->setupUi(this);
                                  serial = new QSerialPort();
                                  serial->setPortName("COM4");
                                  serial->open(QIODevice::ReadWrite);
                                  serial->setBaudRate(QSerialPort::Baud115200);
                                  serial->setDataBits(QSerialPort::Data8);
                                  serial->setParity(QSerialPort::OddParity);
                                  serial->setStopBits(QSerialPort::OneStop);
                                  //serial.setFlowControl(QSerialPort::NoFlowControl);
                                  //serial.open(QIODevice::ReadWrite);
                              
                                  QPixmap logo(":/resources/img/logo.jpg");
                                  int w = ui->label->width();
                                  int h = ui->label->height();
                                  ui->label->setPixmap(logo.scaled(w,h,Qt::KeepAspectRatio));
                              
                                  for(int i=0;i<5;i++) {
                                      for (int j=0;j<40;j++) {
                                          for (int k=0;k<16;k++){
                                              lettres[i][j][k] =' ';   // initializes the letters array
                                          }
                                      }
                                  }
                                 connect(serial, &QSerialPort::readyRead, this, &MainWindow::serialReceived);
                              
                                 Kboard = new Keyboard();
                                 connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                              }
                              
                              MainWindow::~MainWindow()
                              {
                                 delete ui;
                              }
                              
                              void MainWindow::serialReceived()
                              {
                                  QByteArray b = serial->readAll();
                                  qDebug() << b;
                              }
                              
                              void MainWindow::send(QString c)
                              {
                                serial->write("c");
                                qDebug() << "hello world " << c;
                              }
                              
                              #include "keyboard.h" //keyboard.cpp
                              #include "ui_keyboard.h"
                              #include <QtSerialPort>
                              #include "mainwindow.h"
                              
                              
                              bool caps = true, shift = true;
                              
                              Keyboard::Keyboard(QWidget *parent) :
                                  QDialog(parent),
                                  ui(new Ui::Keyboard)
                              
                              {
                                  ui->setupUi(this);
                              }
                              
                              Keyboard::~Keyboard()
                              {
                                  delete ui;
                              }
                              
                              void Keyboard::on_a_clicked()
                              {
                                 QString c;
                                 c = ui->a->text();
                                 emit KeyPressed(c);
                                 qDebug() << c;
                              
                                 if(caps == true && shift == false){ // disables the effect of the shift key when any lettre has been pressed.
                                     shift = false;
                                     on_shift1_clicked();
                                 }
                              }
                              
                              #ifndef MAINWINDOW_H //main window.h
                              #define MAINWINDOW_H
                              
                              #include <QMainWindow>
                              #include "keyboard.h"
                              #include "numpad.h"
                              
                              
                              namespace Ui {
                              class MainWindow;
                              }
                              
                              class MainWindow : public QMainWindow
                              {
                                  Q_OBJECT
                              
                              public:
                                  explicit MainWindow(QWidget *parent = 0);
                                  ~MainWindow();
                              
                              private slots:
                                  void send(QString c);
                              
                              private:
                                  Ui::MainWindow *ui;
                                  Keyboard *keyboard;
                                  Numpad *numpad;
                              };
                              
                              #endif // MAINWINDOW_H
                              
                              #ifndef KEYBOARD_H
                              #define KEYBOARD_H
                              
                              #include <QDialog>
                              
                              namespace Ui {  //keyboard.h
                              class Keyboard;
                              }
                              
                              class Keyboard : public QDialog
                              {
                                  Q_OBJECT
                              
                              public:
                                  explicit Keyboard(QWidget *parent = 0);
                                  ~Keyboard();
                              signals:
                                  void KeyPressed(QString);
                              
                              private slots:
                                  void on_a_clicked();
                                  
                              
                              private:
                                  Ui::Keyboard *ui;
                              };
                              
                              #endif // KEYBOARD_H
                              
                              J.HilkJ Offline
                              J.HilkJ Offline
                              J.Hilk
                              Moderators
                              wrote on last edited by
                              #24

                              @bask185 said in How to use methods of an object from a different class?:

                              Keyboard *keyboard;

                              I think I found the mixup,

                              You have Keyboard as a priavte member of your mainwindow.h, as it should be, and as a global Variable too.

                              I think the instance of your keyboard, that you show and have input of, is not the one you connected your Signal from.

                              Change that.


                              Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                              Q: What's that?
                              A: It's blue light.
                              Q: What does it do?
                              A: It turns blue.

                              B 1 Reply Last reply
                              1
                              • B bask185

                                The one with the comma remains ;)

                                #include "mainwindow.h" // mainwindow.cpp
                                #include "ui_mainwindow.h"
                                #include <QPixmap>
                                #include <QDebug>
                                #include <QPalette>
                                #include <QtSerialPort>
                                #include "keyboard.h"
                                #include "numpad.h"
                                QSerialPort *serial;
                                void readCommand();
                                
                                char lettres[5][40][16];     // initializes all to be used variables;
                                int index1 = 0;
                                int index2 = 0;
                                int colom[5];
                                int row[5];
                                int colorIndex[5];
                                char c;
                                Keyboard *Kboard;
                                
                                MainWindow::MainWindow(QWidget *parent) :
                                    QMainWindow(parent),
                                    ui(new Ui::MainWindow)
                                {
                                    ui->setupUi(this);
                                    serial = new QSerialPort();
                                    serial->setPortName("COM4");
                                    serial->open(QIODevice::ReadWrite);
                                    serial->setBaudRate(QSerialPort::Baud115200);
                                    serial->setDataBits(QSerialPort::Data8);
                                    serial->setParity(QSerialPort::OddParity);
                                    serial->setStopBits(QSerialPort::OneStop);
                                    //serial.setFlowControl(QSerialPort::NoFlowControl);
                                    //serial.open(QIODevice::ReadWrite);
                                
                                    QPixmap logo(":/resources/img/logo.jpg");
                                    int w = ui->label->width();
                                    int h = ui->label->height();
                                    ui->label->setPixmap(logo.scaled(w,h,Qt::KeepAspectRatio));
                                
                                    for(int i=0;i<5;i++) {
                                        for (int j=0;j<40;j++) {
                                            for (int k=0;k<16;k++){
                                                lettres[i][j][k] =' ';   // initializes the letters array
                                            }
                                        }
                                    }
                                   connect(serial, &QSerialPort::readyRead, this, &MainWindow::serialReceived);
                                
                                   Kboard = new Keyboard();
                                   connect(Kboard, &Keyboard::KeyPressed, this, &MainWindow::send);
                                }
                                
                                MainWindow::~MainWindow()
                                {
                                   delete ui;
                                }
                                
                                void MainWindow::serialReceived()
                                {
                                    QByteArray b = serial->readAll();
                                    qDebug() << b;
                                }
                                
                                void MainWindow::send(QString c)
                                {
                                  serial->write("c");
                                  qDebug() << "hello world " << c;
                                }
                                
                                #include "keyboard.h" //keyboard.cpp
                                #include "ui_keyboard.h"
                                #include <QtSerialPort>
                                #include "mainwindow.h"
                                
                                
                                bool caps = true, shift = true;
                                
                                Keyboard::Keyboard(QWidget *parent) :
                                    QDialog(parent),
                                    ui(new Ui::Keyboard)
                                
                                {
                                    ui->setupUi(this);
                                }
                                
                                Keyboard::~Keyboard()
                                {
                                    delete ui;
                                }
                                
                                void Keyboard::on_a_clicked()
                                {
                                   QString c;
                                   c = ui->a->text();
                                   emit KeyPressed(c);
                                   qDebug() << c;
                                
                                   if(caps == true && shift == false){ // disables the effect of the shift key when any lettre has been pressed.
                                       shift = false;
                                       on_shift1_clicked();
                                   }
                                }
                                
                                #ifndef MAINWINDOW_H //main window.h
                                #define MAINWINDOW_H
                                
                                #include <QMainWindow>
                                #include "keyboard.h"
                                #include "numpad.h"
                                
                                
                                namespace Ui {
                                class MainWindow;
                                }
                                
                                class MainWindow : public QMainWindow
                                {
                                    Q_OBJECT
                                
                                public:
                                    explicit MainWindow(QWidget *parent = 0);
                                    ~MainWindow();
                                
                                private slots:
                                    void send(QString c);
                                
                                private:
                                    Ui::MainWindow *ui;
                                    Keyboard *keyboard;
                                    Numpad *numpad;
                                };
                                
                                #endif // MAINWINDOW_H
                                
                                #ifndef KEYBOARD_H
                                #define KEYBOARD_H
                                
                                #include <QDialog>
                                
                                namespace Ui {  //keyboard.h
                                class Keyboard;
                                }
                                
                                class Keyboard : public QDialog
                                {
                                    Q_OBJECT
                                
                                public:
                                    explicit Keyboard(QWidget *parent = 0);
                                    ~Keyboard();
                                signals:
                                    void KeyPressed(QString);
                                
                                private slots:
                                    void on_a_clicked();
                                    
                                
                                private:
                                    Ui::Keyboard *ui;
                                };
                                
                                #endif // KEYBOARD_H
                                
                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #25

                                @bask185 said in How to use methods of an object from a different class?:

                                void MainWindow::send(QString c)
                                {
                                serial->write("c");
                                qDebug() << "hello world " << c;
                                }

                                Can you try to comment out serial->write("c"); and try again?
                                Also: I guess you want to send the string/character entered by user over serial bus, right?
                                In that case you should change

                                serial->write("c");
                                

                                to

                                serial->write(c.toLatin1()); // If you only use ASCII characters
                                

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

                                1 Reply Last reply
                                0
                                • B bask185

                                  idk to get it to work I suppose, but I should declare it in the constructor above the connect function??

                                  In processing I sometimes use global variables because I can acces and modify them in every class I write. In Qt I know very little of what the firetruck I am doing. I do know that in Qt it is a lot more work to get an exact same application than in processing..

                                  E Offline
                                  E Offline
                                  Eeli K
                                  wrote on last edited by
                                  #26

                                  @bask185 I didn't know you know so little about C++ and Qt. It's true that C++ is in many ways a low-level language. Qt takes it a bit higher, but certainly it's still means more work for certain things than many other languages. But on the other hand C++ is on the most popular and used general purpose languages in the world, and unlike with processing, you can call yourself a real programmer if you master C++ and Qt. Every language has its place and has pros and cons. If you want to just get one program done in your life C++ isn't the right language for you, otherwise it pays back what you put into learning it.

                                  1 Reply Last reply
                                  0
                                  • J.HilkJ J.Hilk

                                    @bask185 said in How to use methods of an object from a different class?:

                                    Keyboard *keyboard;

                                    I think I found the mixup,

                                    You have Keyboard as a priavte member of your mainwindow.h, as it should be, and as a global Variable too.

                                    I think the instance of your keyboard, that you show and have input of, is not the one you connected your Signal from.

                                    Change that.

                                    B Offline
                                    B Offline
                                    bask185
                                    wrote on last edited by bask185
                                    #27

                                    @J.Hilk said in How to use methods of an object from a different class?:

                                    @bask185 said in How to use methods of an object from a different class?:

                                    Keyboard *keyboard;

                                    I think I found the mixup,

                                    You have Keyboard as a priavte member of your mainwindow.h, as it should be, and as a global Variable too.

                                    I think the instance of your keyboard, that you show and have input of, is not the one you connected your Signal from.

                                    Change that.

                                    Application Output:  hello world   "a"   // we have a winner!
                                                         hello world  "A" // < caps works too :D
                                    

                                    My thank is great Y'all

                                    @jsulm said in How to use methods of an object from a different class?:

                                    I guess you want to send the string/character entered by user over serial bus, right?

                                    was it that obvious :P?

                                    In that case you should change
                                    serial->write("c");

                                    to
                                    serial->write(c.toLatin1()); // If you only use ASCII characters

                                    Application Output:  "\x06\x04\x01""a"  // < proper respons of the arduino for receiving the 'a'. Tnx ;)
                                    

                                    sigh though... in processing or arduino or whatever I usually send.. just integers or longs. Vague Qt syntax with & * :: private public and what if I want to send a long variable over serial port would I need to characterize all 10 numbers and send 10 bytes instead of 4????

                                    @Eeli-K said in How to use methods of an object from a different class?:

                                    @bask185 I didn't know you know so little about C++ and Qt. It's true that C++ is in many ways a low-level language. Qt takes it a bit higher, but certainly it's still means more work for certain things than many other languages. But on the other hand C++ is on the most popular and used general purpose languages in the world, and unlike with processing, you can call yourself a real programmer if you master C++ and Qt. Every language has its place and has pros and cons. If you want to just get one program done in your life C++ isn't the right language for you, otherwise it pays back what you put into learning it.

                                    we had a few lessons in C++ in my first year in visual studios but even there we would not use :: privates and publics, (the latter 2 we got with java). And as said before I only learned how to use pointers with arrays and not with functions.

                                    But regardless, I almost have my bachelor degree in electrical engineering and learning a new programming language from scrap is what we do.

                                    jsulmJ J.HilkJ 2 Replies Last reply
                                    0
                                    • B bask185

                                      @J.Hilk said in How to use methods of an object from a different class?:

                                      @bask185 said in How to use methods of an object from a different class?:

                                      Keyboard *keyboard;

                                      I think I found the mixup,

                                      You have Keyboard as a priavte member of your mainwindow.h, as it should be, and as a global Variable too.

                                      I think the instance of your keyboard, that you show and have input of, is not the one you connected your Signal from.

                                      Change that.

                                      Application Output:  hello world   "a"   // we have a winner!
                                                           hello world  "A" // < caps works too :D
                                      

                                      My thank is great Y'all

                                      @jsulm said in How to use methods of an object from a different class?:

                                      I guess you want to send the string/character entered by user over serial bus, right?

                                      was it that obvious :P?

                                      In that case you should change
                                      serial->write("c");

                                      to
                                      serial->write(c.toLatin1()); // If you only use ASCII characters

                                      Application Output:  "\x06\x04\x01""a"  // < proper respons of the arduino for receiving the 'a'. Tnx ;)
                                      

                                      sigh though... in processing or arduino or whatever I usually send.. just integers or longs. Vague Qt syntax with & * :: private public and what if I want to send a long variable over serial port would I need to characterize all 10 numbers and send 10 bytes instead of 4????

                                      @Eeli-K said in How to use methods of an object from a different class?:

                                      @bask185 I didn't know you know so little about C++ and Qt. It's true that C++ is in many ways a low-level language. Qt takes it a bit higher, but certainly it's still means more work for certain things than many other languages. But on the other hand C++ is on the most popular and used general purpose languages in the world, and unlike with processing, you can call yourself a real programmer if you master C++ and Qt. Every language has its place and has pros and cons. If you want to just get one program done in your life C++ isn't the right language for you, otherwise it pays back what you put into learning it.

                                      we had a few lessons in C++ in my first year in visual studios but even there we would not use :: privates and publics, (the latter 2 we got with java). And as said before I only learned how to use pointers with arrays and not with functions.

                                      But regardless, I almost have my bachelor degree in electrical engineering and learning a new programming language from scrap is what we do.

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

                                      @bask185 said in How to use methods of an object from a different class?:

                                      we had a few lessons in C++ in my first year in visual studios but even there we would not use :: privates and publics

                                      Then those were not really C++ lessons. public/private (data encapsulation) belong to core concepts in C++ (and any other object oriented programming language).

                                      "what if I want to send a long variable over serial port would I need to characterize all 10 numbers and send 10 bytes instead of 4" - no.
                                      From the user you will get a string like "12345".
                                      Then convert it to int:

                                      long int number = c.toLong();
                                      

                                      And then send the number to Arduino.

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

                                      1 Reply Last reply
                                      0
                                      • B bask185

                                        @J.Hilk said in How to use methods of an object from a different class?:

                                        @bask185 said in How to use methods of an object from a different class?:

                                        Keyboard *keyboard;

                                        I think I found the mixup,

                                        You have Keyboard as a priavte member of your mainwindow.h, as it should be, and as a global Variable too.

                                        I think the instance of your keyboard, that you show and have input of, is not the one you connected your Signal from.

                                        Change that.

                                        Application Output:  hello world   "a"   // we have a winner!
                                                             hello world  "A" // < caps works too :D
                                        

                                        My thank is great Y'all

                                        @jsulm said in How to use methods of an object from a different class?:

                                        I guess you want to send the string/character entered by user over serial bus, right?

                                        was it that obvious :P?

                                        In that case you should change
                                        serial->write("c");

                                        to
                                        serial->write(c.toLatin1()); // If you only use ASCII characters

                                        Application Output:  "\x06\x04\x01""a"  // < proper respons of the arduino for receiving the 'a'. Tnx ;)
                                        

                                        sigh though... in processing or arduino or whatever I usually send.. just integers or longs. Vague Qt syntax with & * :: private public and what if I want to send a long variable over serial port would I need to characterize all 10 numbers and send 10 bytes instead of 4????

                                        @Eeli-K said in How to use methods of an object from a different class?:

                                        @bask185 I didn't know you know so little about C++ and Qt. It's true that C++ is in many ways a low-level language. Qt takes it a bit higher, but certainly it's still means more work for certain things than many other languages. But on the other hand C++ is on the most popular and used general purpose languages in the world, and unlike with processing, you can call yourself a real programmer if you master C++ and Qt. Every language has its place and has pros and cons. If you want to just get one program done in your life C++ isn't the right language for you, otherwise it pays back what you put into learning it.

                                        we had a few lessons in C++ in my first year in visual studios but even there we would not use :: privates and publics, (the latter 2 we got with java). And as said before I only learned how to use pointers with arrays and not with functions.

                                        But regardless, I almost have my bachelor degree in electrical engineering and learning a new programming language from scrap is what we do.

                                        J.HilkJ Offline
                                        J.HilkJ Offline
                                        J.Hilk
                                        Moderators
                                        wrote on last edited by
                                        #29

                                        @bask185 said in How to use methods of an object from a different class?:

                                        sigh though... in processing or arduino or whatever I usually send.. just integers or longs. Vague Qt syntax with & * :: private public and what if I want to send a long variable over serial port would I need to characterize all 10 numbers and send 10 bytes instead of 4????

                                        QSerialPort::writeData has a max length of qint64 , long long int and __int64 respectively so you should be fine sending 'long' variables.


                                        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                        Q: What's that?
                                        A: It's blue light.
                                        Q: What does it do?
                                        A: It turns blue.

                                        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