How to use methods of an object from a different class?
-
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).
@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 :)
@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!
-
@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
-
@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.
@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
-
@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?
@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
-
@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
-
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
-
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