I have a small exercise purely in C++ with a slot this way:

Calculator.h:

Qt Code:
  1. #ifndef CALCULATOR_H
  2. #define CALCULATOR_H
  3.  
  4. #include <QDialog>
  5.  
  6. class QLineEdit;
  7.  
  8. class Calculator : public QDialog
  9. {
  10. Q_OBJECT
  11.  
  12. public:
  13. explicit Calculator(QWidget *parent = 0);
  14. private slots:
  15. void myslot(QString);
  16. private:
  17. QLineEdit* lineEdit;
  18. QPushButton* oneButton;
  19. QPushButton* twoButton;
  20. QPushButton* quitButton;
  21. };
  22.  
  23. #endif // CALCULATOR_H
To copy to clipboard, switch view to plain text mode 


Calculator.cpp is this:

Qt Code:
  1. #include "calculator.h"
  2. #include <QPushButton>
  3. #include <QLineEdit>
  4. #include <QVBoxLayout>
  5.  
  6. Calculator::Calculator(QWidget *parent)
  7. : QDialog(parent)
  8. {
  9. lineEdit = new QLineEdit;
  10. oneButton = new QPushButton("1");
  11. twoButton = new QPushButton("2");
  12. quitButton = new QPushButton("Quit");
  13.  
  14. QVBoxLayout* vbox = new QVBoxLayout;
  15. vbox -> addWidget (lineEdit);
  16. vbox -> addWidget (oneButton);
  17. vbox -> addWidget (twoButton);
  18. vbox -> addWidget (quitButton);
  19.  
  20. setLayout(vbox);
  21.  
  22. QString st1 = "1";
  23. QString st2 = "2";
  24. connect(oneButton, SIGNAL(clicked()), this, SLOT(myslot(st1)));
  25. connect(twoButton, SIGNAL(clicked()), this, SLOT(myslot(st2)));
  26. connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
  27. }
  28.  
  29. void Calculator::myslot(QString str)
  30. {
  31. lineEdit -> setText(str);
  32. }
To copy to clipboard, switch view to plain text mode 


And main.cpp is this way:

Qt Code:
  1. #include <QApplication>
  2. #include "calculator.h"
  3.  
  4. int main(int argc, char* argv[])
  5. {
  6. QApplication app(argc, argv);
  7. Calculator calculator;
  8. calculator.show();
  9. return app.exec();
  10. }
To copy to clipboard, switch view to plain text mode 

The app runs without errors but nothing will be shown in the lineEdit when clicking oneButton and twoButton! And also there are warning messages in the Application Output saying:


QObject::connect: No such slot Calculator::myslot(st1) in ..\Calculator\calculator.cpp:24
QObject::connect: No such slot Calculator::myslot(st2) in ..\Calculator\calculator.cpp:25


What is the reason and how to use a slot in Qt like a function in C++ please?