Russian Qt Forum

Qt => Вопросы новичков => Тема начата: cooldman от Январь 30, 2012, 19:22



Название: работа со SLOT'ами
Отправлено: cooldman от Январь 30, 2012, 19:22
Недавно начал изучать Qt  и решил попробовать написать будильник. Суть в следующем:есть класс будильник
Код:
class ring:public QObject{

    Q_OBJECT

private:
    int hour;
    int minute;
    QString ring_name;

public:
    ring(){
        hour=0;
        minute=0;
        ring_name="SomeName";
    }
public slots:
    void change_all_slot(int h, int m){
        hour=h;
        minute=m;
    }
};
В самой программе создается форма с полями
Код:
ring *n1=new ring();
QTextEdit *name_edit=new QTextEdit();
QTimeEdit *time_edit=new QTimeEdit();
QPushButton *save_button=new QPushButton(QString::fromLocal8Bit("Сохранить"));
QTime s=time_edit->time();
QObject::connect(save_button,SIGNAL(clicked()),n1,SLOT(change_all_slot(s.hour(),s.minute())));
в результате код выполняется, но с
Код:
Object::connect: No such slot ring::change_all_slot(s.hour(),s.minute()) in ..\intime\main.cpp:49
и соответственно пользы от кнопки нет
если убрать передаваемые параметры в объявлении класса, и соответственно ничего не передавать, то этот слот видит=(
Подскажите пожалуйста в чем ошибка


Название: Re: работа со SLOT'ами
Отправлено: alexman от Январь 30, 2012, 19:46
Изучайте внимательнее.


Название: Re: работа со SLOT'ами
Отправлено: cooldman от Январь 30, 2012, 19:49
Изучайте внимательнее.
а можно чуть подробнее? ??? я 2 дня потратил пытаясь разобратья, так пока и не понял=(


Название: Re: работа со SLOT'ами
Отправлено: neversleep от Январь 30, 2012, 19:54
Тут не только код соединения не правильный, но и алгоритм в целом. Сигналы и слоты (http://doc.crossplatform.ru/qt/4.4.3/signalsandslots.html).
Код
C++ (Qt)
QObject::connect(save_button,SIGNAL(clicked()),this,SLOT(change_all_slot()));
////////////////////////
public slots:
   void change_all_slot(){
       n1->hour = time_edit->time().hour();
       n1->minute = time_edit->time().minute();
   }
};
 


Название: Re: работа со SLOT'ами
Отправлено: cooldman от Январь 30, 2012, 20:31
Читал уже эту статью, правда на хабре.
хМ, класс ring первоначально не знает ни о кнопке save_button ни о time_edit, поэтому
Код:
QObject::connect(save_button,SIGNAL(clicked()),this,SLOT(change_all_slot()));
////////////////////////
public slots:
    void change_all_slot(){
        n1->hour = time_edit->time().hour();
        n1->minute = time_edit->time().minute();
    }
};

не катит же.
Я не пойму в чем разница между слотом с параметром, и слотом без параметра! без параметра все видит, а с параметром нет=(


Название: Re: работа со SLOT'ами
Отправлено: kambala от Январь 30, 2012, 20:44
у слота не может быть параметров больше, чем у сигнала


Название: Re: работа со SLOT'ами
Отправлено: alexman от Январь 30, 2012, 20:45
Более того: сигнатуры должны совпадать.


Название: Re: работа со SLOT'ами
Отправлено: mutineer от Январь 30, 2012, 22:13
Более того: параметры в слот передаются совсем не при коннекте. RTFM про слоты внимательнее