crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Создание пользовательских сигналов
AD
  опции профиля:
сообщение 10.7.2008, 12:55
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Насколько я понял из всего моего полугодового программирования на Qt, то сигнал - это функция, указывающая реакцию, на которую запускается функция-слот.
Так вопрос в том, можете доступно объяснить: чем надо руководствоваться, создавая свои собственные сигналы? Не очень понятно, какое количество параметров можно задавать, как вообще Qt понимает эту реакцию? Про слоты все в общем-то понятно!
В книге про это не указано подробно!

Сообщение отредактировал Litkevich Yuriy - 31.1.2009, 13:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 10.7.2008, 13:45
Сообщение #2


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


ничего сложного:
чтобы написать свой сигнал, достаточно объявить функцию-сигнал в поле класса
signals:
           void mysignal(); //простой сигнал без параметров

либо так:
Q_SIGNALS:
          void mysignal(); //эквивалентно предыдущему примеру

и когда нужно, эммитишь сигнал:
emit mysignal();

не забывай, что тебе не нужно реализовывать этот сигнал как функцию, достаточно только объвить, реализует его за тебя moc, который сделает нечто наподобие:
void MyClass::mysignal() {
                      QMetaObject::activate(this, &staticMetaObject, 0, 0);
}

также помни, что тип функции-сигнала всегда должен быть void, то есть сигнал не должен что-либо возвращать
если тебе нужно с параметрами (их может быть сколько угодно), то фактически также само, только добавить нужные типы:
signals:
           void mysignal(int, const QString&); //теперь этот сигнал с двумя параметрами - типа int и типа const QString&

соответственно эммитить его надо примерно так:
emit mysignal(100, "word");

надеюсь теперь понятно?

Сообщение отредактировал void* - 10.7.2008, 13:58
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 1:28