I have a small exercise purely in C++ with a slot this way:
Calculator.h:
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <QDialog>
{
Q_OBJECT
public:
explicit Calculator
(QWidget *parent
= 0);
private slots:
private:
};
#endif // CALCULATOR_H
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <QDialog>
class QLineEdit;
class QPushButton;
class Calculator : public QDialog
{
Q_OBJECT
public:
explicit Calculator(QWidget *parent = 0);
private slots:
void myslot(QString);
private:
QLineEdit* lineEdit;
QPushButton* oneButton;
QPushButton* twoButton;
QPushButton* quitButton;
};
#endif // CALCULATOR_H
To copy to clipboard, switch view to plain text mode
Calculator.cpp is this:
#include "calculator.h"
#include <QPushButton>
#include <QLineEdit>
#include <QVBoxLayout>
Calculator
::Calculator(QWidget *parent
){
vbox -> addWidget (lineEdit);
vbox -> addWidget (oneButton);
vbox -> addWidget (twoButton);
vbox -> addWidget (quitButton);
setLayout(vbox);
connect(oneButton, SIGNAL(clicked()), this, SLOT(myslot(st1)));
connect(twoButton, SIGNAL(clicked()), this, SLOT(myslot(st2)));
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
}
void Calculator
::myslot(QString str
) {
lineEdit -> setText(str);
}
#include "calculator.h"
#include <QPushButton>
#include <QLineEdit>
#include <QVBoxLayout>
Calculator::Calculator(QWidget *parent)
: QDialog(parent)
{
lineEdit = new QLineEdit;
oneButton = new QPushButton("1");
twoButton = new QPushButton("2");
quitButton = new QPushButton("Quit");
QVBoxLayout* vbox = new QVBoxLayout;
vbox -> addWidget (lineEdit);
vbox -> addWidget (oneButton);
vbox -> addWidget (twoButton);
vbox -> addWidget (quitButton);
setLayout(vbox);
QString st1 = "1";
QString st2 = "2";
connect(oneButton, SIGNAL(clicked()), this, SLOT(myslot(st1)));
connect(twoButton, SIGNAL(clicked()), this, SLOT(myslot(st2)));
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
}
void Calculator::myslot(QString str)
{
lineEdit -> setText(str);
}
To copy to clipboard, switch view to plain text mode
And main.cpp is this way:
#include <QApplication>
#include "calculator.h"
int main(int argc, char* argv[])
{
Calculator calculator;
calculator.show();
return app.exec();
}
#include <QApplication>
#include "calculator.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
Calculator calculator;
calculator.show();
return app.exec();
}
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?
Bookmarks