Читаю книгу "Qt4: профессиональное программирование на C++". Дошел до сигнал/слот технологии и застрял. Пример из ниги работает, но как только я пытаюсь реализовать пример из головы, ничего не выходит. Официальную документацию смотрел, но там еще менее понятно для меня.
В С++ не новичок, но опыта очень мало.
Я хочу, чтобы в зависимости от переданого параметра в my_slot.send_signal(), выводилась нужная строка в консоль. Именно через сигнал/слот для того, чтобы понять как это работает.
Все компилируется без ошибок (qmake -project && qmake && make), но работает не так, как я хочу. Я подозреваю, что что-то неправильно сделал со слотами.
Вот, что у меня есть:
main.cpp
Код: Выделить всё
#include <QApplication>
#include "slot.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
slot my_slot;
QObject::connect(&my_slot, SIGNAL(signal_A()), &my_slot, SLOT(slot_A()));
QObject::connect(&my_slot, SIGNAL(signal_B()), &my_slot, SLOT(slot_B()));
QObject::connect(&my_slot, SIGNAL(signal_C()), &my_slot, SLOT(slot_C()));
QObject::connect(&my_slot, SIGNAL(signal_D()), &my_slot, SLOT(slot_D()));
my_slot.send_signal(2);
return app.exec();
}slot.h
Код: Выделить всё
#ifndef SLOT_H
#define SLOT_H
#include <QObject>
class slot : public QObject
{
Q_OBJECT
public:
void send_signal(int which_one);
public slots:
void slot_A();
void slot_B();
void slot_C();
void slot_D();
signals:
void signal_A();
void signal_B();
void signal_C();
void signal_D();
};
#endif // SLOT_Hslot.cpp
Код: Выделить всё
#include "slot.h"
#include <iostream>
void slot::slot_A()
{
std::cout << "This is slot_A";
}
void slot::slot_B()
{
std::cout << "This is slot_B";
}
void slot::slot_C()
{
std::cout << "This is slot_C";
}
void slot::slot_D()
{
std::cout << "This is slot_D";
}
void slot::send_signal(int wich_one)
{
switch(wich_one)
{
case 1: emit signal_A(); break;
case 2: emit signal_B(); break;
case 3: emit signal_C(); break;
case 4: emit signal_D(); break;
default: emit signal_A();
}
}