Russian Qt Forum

Qt => Общие вопросы => Тема начата: labview от Июль 30, 2010, 13:18



Название: Сигналы и слоты
Отправлено: labview от Июль 30, 2010, 13:18
Всем привет!

Решил заняться межплатформенным программированием с использованием GUI на С++. Заинсталлировал Netbeans, g++ и QT. Надеюсь мой выбор инструментов для программирования был сделан правильно.
Пока я работаю в винде, но собираюсь вечером заинсталлировать то же самое под линукс.

И так, я сделал пару примерчиков с сайта QT и Netbeans. Возникли следующие вопросы по слотам и сигналам.

Сигнал, насколько я понимаю это ивент (например нажатие на кнопку, изменение размера окна, изменение текста в текст-боксе и прочее). Этот сигнал можно соединить с каким нибудь экшеном другого элемента лицевой панели (например поменять его цвет или содержимое).
И такое соединение называется слот.
Я пока правильно понял?

В QT дизайнере можно создавать такие соединения/слоты. Тут возникает такой вопрос, что если у меня сигнал должен просто вызывать какую нибудь функцию в моей программе, но не должен быть соединён с другим элементом лицевой панели? То есть мне просто нужен Callback. Как это организовать в QT дизайнере? Просто в поле Receiver мне нужно указывать получателя сигнала, а там на выбор только элементы лицевой панели и их функции.

Спасибо и извините, если мои вопросы по-Вашему являются глупыми.

С уважением, labview


Название: Re: Сигналы и слоты
Отправлено: JamS007 от Июль 30, 2010, 13:28
Вы все правильно поняли.

О создании слотов: Qt дизайнер по сути своей являетсяь проектировщиком форм, он не берет на себя функционал по созданио сторонних слотов. Рекомендую посмотреть в сторону QtCreator где все эти функции очень удобно интегрированы. О том как создать свой слот в QtCreator совсем недавно на форуме поднималась тема:
http://www.prog.org.ru/topic_14379_0.html (http://www.prog.org.ru/topic_14379_0.html)


Название: Re: Сигналы и слоты
Отправлено: SimpleSunny от Июль 30, 2010, 13:33
Первое что стоит запомнить, так это:

"Qt - Qt Development Frameworks; QT - QuickTime"


Название: Re: Сигналы и слоты
Отправлено: labview от Июль 30, 2010, 13:42
Вы все правильно поняли.

О создании слотов: Qt дизайнер по сути своей являетсяь проектировщиком форм, он не берет на себя функционал по созданио сторонних слотов. Рекомендую посмотреть в сторону QtCreator где все эти функции очень удобно интегрированы. О том как создать свой слот в QtCreator совсем недавно на форуме поднималась тема:
http://www.prog.org.ru/topic_14379_0.html (http://www.prog.org.ru/topic_14379_0.html)

Спасибо, попробую QtCreator.

Цитировать
Первое что стоит запомнить, так это:

"Qt - Qt Development Frameworks; QT - QuickTime"

Запомнил  ;D


Название: Re: Сигналы и слоты
Отправлено: labview от Июль 30, 2010, 14:02
Пробую QtCreator.
Сделал окно, разместил кнопку выхода и два элемента LineEdit. В одном я хочу ввести имя, а в другом выдать сообщение "Hello имя!".
Для этого создал слот, который обрабатывает сигнал textEdited(). Получателем назначил второй LineEdit, но в каком месте я могу обработать выдаваемое сообщение?

Ещё раз сори за чайниковый вопрос.

С уважением, labview.

ЗЫ прочитал тему, на которую Вы далии линк выше и что нужно создавать слот по-другому. На этом спасибо.
Теперь возник другой вопрос, но это уже другая тема.


Название: Re: Сигналы и слоты
Отправлено: crossly от Июль 30, 2010, 14:12
для этого нудно создать свой слот... и соединить его с сигналом.... в слоте обрабатываем что хотим и выводим во второй lineEdit


Название: Re: Сигналы и слоты
Отправлено: SimpleSunny от Июль 30, 2010, 14:12
Такое необходимо делать в коде руками, т.е. создать слот и соединить его с сигналом textEdited().

В QtCreator выделите первый QLineEdit, нажмите ПКМ, выберете пункт перейти к слоту. QtCreator создаст слот с определленным именем, который будет автоматически связываться с выбранным сигналом.
Можно соединять также и руками, используя connect, чтобы имена слотов былы более информативными.


Название: Re: Сигналы и слоты
Отправлено: labview от Июль 30, 2010, 14:13
Да, огромное спасибо, уже понял, отредактировал выше.


Название: Re: Сигналы и слоты
Отправлено: lit-uriy от Июль 30, 2010, 15:47
>>И такое соединение называется слот.
категорически не верно. Соединение - это соединение.
Слот - это целевая функция соединения.

Далее, чтобы не было путаницы:
Экшон, правильно Action, или Действие, имеет отдельный смысл в Qt. И он не является слотом.

Сигнал, по смыслу, следует воспринимать буквально. Либо по аналогии с электричеством, в виде шнурка-источника.
Слот - в виде разъёма-приёмника.

А функцию QObject::connect, как операцию по вставке шнурка в разъём (это и есть соединение)


Название: Re: Сигналы и слоты
Отправлено: labview от Июль 30, 2010, 16:27
Спасибо, информации о коннекте мне как раз и не хватало.