Решено: [C++] Qt4: signals / slots (Не могу до конца понять)

Модератор: Модераторы разделов

Аватара пользователя
blackst0ne
Сообщения: 528
Статус:
ОС: Ubuntu 9.04

Решено: [C++] Qt4: signals / slots

Сообщение blackst0ne »

Здравствйте.

Читаю книгу "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_H


slot.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();
        }
}
Администрация! Пожалуйста, добавьте птичку "решено", а также соответствующую кнопку на ajax'е в теме (подробнее здесь).
Спасибо сказали:
Аватара пользователя
whirlwind
Сообщения: 67

Re: Решено: [C++] Qt4: signals / slots

Сообщение whirlwind »

естть подозрение, что у вас просто в консоль ничего не выводится
попробуйте

Код: Выделить всё

qDebug() << "This is slot_B";
(нужно будет #include <QDebug>)
Добро всегда побеждает зло. Мы победили, значит мы - добро.
Спасибо сказали:
Аватара пользователя
blackst0ne
Сообщения: 528
Статус:
ОС: Ubuntu 9.04

Re: Решено: [C++] Qt4: signals / slots

Сообщение blackst0ne »

whirlwind
Хм. Спасибо Вам, с qDebug в консоль выпало нужное сообщение.
Осталось понять почему мой вариант не сработал.
Администрация! Пожалуйста, добавьте птичку "решено", а также соответствующую кнопку на ajax'е в теме (подробнее здесь).
Спасибо сказали:
Аватара пользователя
whirlwind
Сообщения: 67

Re: Решено: [C++] Qt4: signals / slots

Сообщение whirlwind »

честно говоря, не знаю. Но могу опять предположить, что дело в буферизации потока.
Потому что код

Код: Выделить всё

std::cout << "This is slot_A";
std::cout.flush();

тоже вроде как нормально работает
Добро всегда побеждает зло. Мы победили, значит мы - добро.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Решено: [C++] Qt4: signals / slots

Сообщение RasenHerz »

надо: std::cout << "some_string" << std::endl;
в противном случае вывод буферизуется.
Спасибо сказали:
Аватара пользователя
blackst0ne
Сообщения: 528
Статус:
ОС: Ubuntu 9.04

Re: Решено: [C++] Qt4: signals / slots

Сообщение blackst0ne »

Спасибо. =)
Администрация! Пожалуйста, добавьте птичку "решено", а также соответствующую кнопку на ajax'е в теме (подробнее здесь).
Спасибо сказали: