Russian Qt Forum
Май 06, 2024, 02:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: работа со SLOT'ами  (Прочитано 3262 раз)
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
и соответственно пользы от кнопки нет
если убрать передаваемые параметры в объявлении класса, и соответственно ничего не передавать, то этот слот видит=(
Подскажите пожалуйста в чем ошибка
Записан
alexman
Гость
« Ответ #1 : Январь 30, 2012, 19:46 »

Изучайте внимательнее.
Записан
cooldman
Гость
« Ответ #2 : Январь 30, 2012, 19:49 »

Изучайте внимательнее.
а можно чуть подробнее? Непонимающий я 2 дня потратил пытаясь разобратья, так пока и не понял=(
Записан
neversleep
Гость
« Ответ #3 : Январь 30, 2012, 19:54 »

Тут не только код соединения не правильный, но и алгоритм в целом. Сигналы и слоты.
Код
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();
   }
};
 
« Последнее редактирование: Январь 30, 2012, 20:04 от neversleep » Записан
cooldman
Гость
« Ответ #4 : Январь 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();
    }
};

не катит же.
Я не пойму в чем разница между слотом с параметром, и слотом без параметра! без параметра все видит, а с параметром нет=(
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #5 : Январь 30, 2012, 20:44 »

у слота не может быть параметров больше, чем у сигнала
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
alexman
Гость
« Ответ #6 : Январь 30, 2012, 20:45 »

Более того: сигнатуры должны совпадать.
Записан
mutineer
Гость
« Ответ #7 : Январь 30, 2012, 22:13 »

Более того: параметры в слот передаются совсем не при коннекте. RTFM про слоты внимательнее
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 22.