How to use methods of an object from a different class?
-
wrote on 20 Mar 2017, 14:54 last edited by A Former User
I have a serial object in my mainwindow.cpp in which I can succesfully write and send bytes to an arduino.
I can open a new window with a keyboard:
This keyboard is ofcourse made in a different class. If I press a button like the 'a'. I want to serial.write("a"); But as you can guess it. I cannot call any serial method because the serial object only exists in the scope of the main window.
I am happy with 1 of the following 2 solutions: I either want to be able to call serial methods in the keyboard class ór I want to call a function in the mainwindow class from out the keyboard class with which I send a character or string as to be written arguement.
I do not know how do to any of this. So how can I fix this?
-
@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.
wrote on 21 Mar 2017, 09:48 last edited by 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 charactersApplication 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.
-
wrote on 20 Mar 2017, 15:10 last edited by
The code:
Keyboard class#include "keyboard.h" #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() { // mainwindow::send('a'); // or // serial.write("a"); }
MainWindow:
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QPixmap> #include <QDebug> #include <QPalette> #include <QtSerialPort> #include "keyboard.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]; 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); } MainWindow::~MainWindow() { delete ui; } void MainWindow::serialReceived() { QByteArray b = serial->readAll(); qDebug() << b; } void MainWindow::send(char c) // send function which I'd like to call from Keyboard { serial->write("c"); qDebug() << c; }
-
wrote on 20 Mar 2017, 19:38 last edited by
The two classes are unnecessarily tightly coupled, as far as I can see the keyboard class doesn't have to know the main window. Just write a signal in it, emit it in on_button_clicked() and connect it in the mainwindow to the slot mainwindow::send (which of course must be a slot).
-
The two classes are unnecessarily tightly coupled, as far as I can see the keyboard class doesn't have to know the main window. Just write a signal in it, emit it in on_button_clicked() and connect it in the mainwindow to the slot mainwindow::send (which of course must be a slot).
wrote on 21 Mar 2017, 07:17 last edited by bask185@Eeli-K said in How to use methods of an object from a different class?:
Just write a signal in it, emit it in on_button_clicked() and connect it in the mainwindow to the slot mainwindow::send
?? and now in English??
I have this in mainwindow
void MainWindow::send(char c) { connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c)); serial->write("c"); // I am aware that this does not send the value of variable c just "c" qDebug() << c; }
and in Keyboard I do
void Keyboard::on_a_clicked() { QString c; c = ui->a->text(); MainWindow::send('a'); }
in main window I get 2 errors
C:\Users\sknippels\Documents\GUI\mainwindow.cpp:65: error: cannot call member function 'void Keyboard::on_a_clicked()' without object connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c)); ^
and
C:\Users\sknippels\Documents\GUI\mainwindow.cpp:65: error: invalid operands of types 'MainWindow*' and 'void' to binary 'operator&' connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c)); ^
I understand less than nothing of this vague syntax. And I also never use pointers, I would only use a pointer for use with arrays but because there are those things called for-loops... I just don't do pointers.
EDIT. I made some changes, I also noticed a typo. I move this line to the constructor (and removed the typo)
connect(keyboard, &Keyboard::on_a_clicked, this, &MainWindow::send);
and now I have 3 error messages in qobjectdefs_impl.h
C:\Qt\5.8\mingw53_32\include\QtCore\qglobal.h:732: error: static assertion failed: The slot requires more arguments than the signal provides. #define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message) ^
C:\Qt\5.8\mingw53_32\include\QtCore\qglobal.h:732: error: static assertion failed: Signal and slot arguments are not compatible. #define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message) ^
C:\Qt\5.8\mingw53_32\include\QtCore\qobjectdefs_impl.h:76: error: no type named 'Car' in 'struct QtPrivate::List<>' typedef typename List_Append<List<typename L::Car>,typename List_Left<typename L::Cdr, N - 1>::Value>::Value Value; ^
For me this is total Chinese :(
-
@Eeli-K said in How to use methods of an object from a different class?:
Just write a signal in it, emit it in on_button_clicked() and connect it in the mainwindow to the slot mainwindow::send
?? and now in English??
I have this in mainwindow
void MainWindow::send(char c) { connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c)); serial->write("c"); // I am aware that this does not send the value of variable c just "c" qDebug() << c; }
and in Keyboard I do
void Keyboard::on_a_clicked() { QString c; c = ui->a->text(); MainWindow::send('a'); }
in main window I get 2 errors
C:\Users\sknippels\Documents\GUI\mainwindow.cpp:65: error: cannot call member function 'void Keyboard::on_a_clicked()' without object connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c)); ^
and
C:\Users\sknippels\Documents\GUI\mainwindow.cpp:65: error: invalid operands of types 'MainWindow*' and 'void' to binary 'operator&' connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c)); ^
I understand less than nothing of this vague syntax. And I also never use pointers, I would only use a pointer for use with arrays but because there are those things called for-loops... I just don't do pointers.
EDIT. I made some changes, I also noticed a typo. I move this line to the constructor (and removed the typo)
connect(keyboard, &Keyboard::on_a_clicked, this, &MainWindow::send);
and now I have 3 error messages in qobjectdefs_impl.h
C:\Qt\5.8\mingw53_32\include\QtCore\qglobal.h:732: error: static assertion failed: The slot requires more arguments than the signal provides. #define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message) ^
C:\Qt\5.8\mingw53_32\include\QtCore\qglobal.h:732: error: static assertion failed: Signal and slot arguments are not compatible. #define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message) ^
C:\Qt\5.8\mingw53_32\include\QtCore\qobjectdefs_impl.h:76: error: no type named 'Car' in 'struct QtPrivate::List<>' typedef typename List_Append<List<typename L::Car>,typename List_Left<typename L::Cdr, N - 1>::Value>::Value Value; ^
For me this is total Chinese :(
@bask185
hi,I'll try to help:
Your custom Keyboard, as it is made in a new class, has to be initialized somewhere.
I asume something like this in your MainWindow constructor:
//Something like this Keyboard kBoard; // or Keyboard *kBoard = new Keyboard(); // or Keyboard *kBoard = new Keyboard(anyParent);
kBoard is in this case the object.
in your KeyBorad header you need a SIGNAL
signals: void keyPressed(QString key);
change your on_click function:
void Keyboard::on_a_clicked() { QString c; c = ui->a->text(); emit KeyPressed(c); }
Move
connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c));
from the SLOT send(c) to right behind the object creation and change it to the following to remove the error:
Keyboard *kBoard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
and you should be done :)
-
@bask185
hi,I'll try to help:
Your custom Keyboard, as it is made in a new class, has to be initialized somewhere.
I asume something like this in your MainWindow constructor:
//Something like this Keyboard kBoard; // or Keyboard *kBoard = new Keyboard(); // or Keyboard *kBoard = new Keyboard(anyParent);
kBoard is in this case the object.
in your KeyBorad header you need a SIGNAL
signals: void keyPressed(QString key);
change your on_click function:
void Keyboard::on_a_clicked() { QString c; c = ui->a->text(); emit KeyPressed(c); }
Move
connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c));
from the SLOT send(c) to right behind the object creation and change it to the following to remove the error:
Keyboard *kBoard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
and you should be done :)
wrote on 21 Mar 2017, 07:45 last edited by@J.Hilk said in How to use methods of an object from a different class?:
@bask185
hi,I'll try to help:
Your custom Keyboard, as it is made in a new class, has to be initialized somewhere.
I asume something like this in your MainWindow constructor:
//Something like this Keyboard kBoard; // or Keyboard *kBoard = new Keyboard(); // or Keyboard *kBoard = new Keyboard(anyParent);
kBoard is in this case the object.
in your KeyBorad header you need a SIGNAL
signals: void keyPressed(QString key);
change your on_click function:
void Keyboard::on_a_clicked() { QString c; c = ui->a->text(); emit KeyPressed(c); }
Move
connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c));
from the SLOT send(c) to right behind the object creation and change it to the following to remove the error:
Keyboard *kBoard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
and you should be done :)
Tnx I am closer but I got one error message left.
inKeyboard *keyboard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
I get
C:\Users\sknippels\Documents\GUI\mainwindow.cpp:52: error: invalid use of member (did you forget the '&' ?) connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send); ^
it complains about the & eventhough it is there.. :/
-
@J.Hilk said in How to use methods of an object from a different class?:
@bask185
hi,I'll try to help:
Your custom Keyboard, as it is made in a new class, has to be initialized somewhere.
I asume something like this in your MainWindow constructor:
//Something like this Keyboard kBoard; // or Keyboard *kBoard = new Keyboard(); // or Keyboard *kBoard = new Keyboard(anyParent);
kBoard is in this case the object.
in your KeyBorad header you need a SIGNAL
signals: void keyPressed(QString key);
change your on_click function:
void Keyboard::on_a_clicked() { QString c; c = ui->a->text(); emit KeyPressed(c); }
Move
connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c));
from the SLOT send(c) to right behind the object creation and change it to the following to remove the error:
Keyboard *kBoard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
and you should be done :)
Tnx I am closer but I got one error message left.
inKeyboard *keyboard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
I get
C:\Users\sknippels\Documents\GUI\mainwindow.cpp:52: error: invalid use of member (did you forget the '&' ?) connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send); ^
it complains about the & eventhough it is there.. :/
mmh,
did you declare send as a slot in your mainwindow cpp?private slots: //public slots: void send(QString s);
Edit:
just noticed, your Send-Function wants a
char
and you send a QString that will most likly not work.change one or the other. I would suggest chaning the Mainwindow::Send to accept QString, makes it easier.
-
@J.Hilk said in How to use methods of an object from a different class?:
@bask185
hi,I'll try to help:
Your custom Keyboard, as it is made in a new class, has to be initialized somewhere.
I asume something like this in your MainWindow constructor:
//Something like this Keyboard kBoard; // or Keyboard *kBoard = new Keyboard(); // or Keyboard *kBoard = new Keyboard(anyParent);
kBoard is in this case the object.
in your KeyBorad header you need a SIGNAL
signals: void keyPressed(QString key);
change your on_click function:
void Keyboard::on_a_clicked() { QString c; c = ui->a->text(); emit KeyPressed(c); }
Move
connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c));
from the SLOT send(c) to right behind the object creation and change it to the following to remove the error:
Keyboard *kBoard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
and you should be done :)
Tnx I am closer but I got one error message left.
inKeyboard *keyboard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
I get
C:\Users\sknippels\Documents\GUI\mainwindow.cpp:52: error: invalid use of member (did you forget the '&' ?) connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send); ^
it complains about the & eventhough it is there.. :/
@bask185 said in How to use methods of an object from a different class?:
Keyboard *keyboard = new Keyboard();
connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);Aren't you missing a comma?
Keyboard *keyboard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this, &MainWindow::send);
-
@bask185
hi,I'll try to help:
Your custom Keyboard, as it is made in a new class, has to be initialized somewhere.
I asume something like this in your MainWindow constructor:
//Something like this Keyboard kBoard; // or Keyboard *kBoard = new Keyboard(); // or Keyboard *kBoard = new Keyboard(anyParent);
kBoard is in this case the object.
in your KeyBorad header you need a SIGNAL
signals: void keyPressed(QString key);
change your on_click function:
void Keyboard::on_a_clicked() { QString c; c = ui->a->text(); emit KeyPressed(c); }
Move
connect(keyboard, &Keyboard::on_a_clicked(), this &MainWindow::send(c));
from the SLOT send(c) to right behind the object creation and change it to the following to remove the error:
Keyboard *kBoard = new Keyboard(); connect(keyboard, &Keyboard::KeyPressed, this &MainWindow::send);
and you should be done :)
@J.Hilk said in How to use methods of an object from a different class?:
//Something like this
Keyboard kBoard;Please do NOT do this in the constructor: kBoard would be a local variable and would disappear when the constructor finishes!
-
@J.Hilk said in How to use methods of an object from a different class?:
//Something like this
Keyboard kBoard;Please do NOT do this in the constructor: kBoard would be a local variable and would disappear when the constructor finishes!
-
wrote on 21 Mar 2017, 08:18 last edited by
@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
-
@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
@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.
-
@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
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
-
@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.
wrote on 21 Mar 2017, 08:31 last edited by@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
-
@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
@bask185 Please read what @J-Hilk wrote
-
wrote on 21 Mar 2017, 08:45 last edited by
@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 :(
-
@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 :(
@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?
-
@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?
wrote on 21 Mar 2017, 09:09 last edited by@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
-
@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
@bask185 Can you please post your code? Else I don't know what is wrong.
-
@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
7/29