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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сигналы и слоты  (Прочитано 5900 раз)
labview
Гость
« : Июль 30, 2010, 13:18 »

Всем привет!

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

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

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

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

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

С уважением, labview
Записан
JamS007
Гость
« Ответ #1 : Июль 30, 2010, 13:28 »

Вы все правильно поняли.

О создании слотов: Qt дизайнер по сути своей являетсяь проектировщиком форм, он не берет на себя функционал по созданио сторонних слотов. Рекомендую посмотреть в сторону QtCreator где все эти функции очень удобно интегрированы. О том как создать свой слот в QtCreator совсем недавно на форуме поднималась тема:
http://www.prog.org.ru/topic_14379_0.html
Записан
SimpleSunny
Гость
« Ответ #2 : Июль 30, 2010, 13:33 »

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

"Qt - Qt Development Frameworks; QT - QuickTime"
Записан
labview
Гость
« Ответ #3 : Июль 30, 2010, 13:42 »

Вы все правильно поняли.

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

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

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

"Qt - Qt Development Frameworks; QT - QuickTime"

Запомнил  Смеющийся
Записан
labview
Гость
« Ответ #4 : Июль 30, 2010, 14:02 »

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

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

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

ЗЫ прочитал тему, на которую Вы далии линк выше и что нужно создавать слот по-другому. На этом спасибо.
Теперь возник другой вопрос, но это уже другая тема.
« Последнее редактирование: Июль 30, 2010, 14:12 от labview » Записан
crossly
Гость
« Ответ #5 : Июль 30, 2010, 14:12 »

для этого нудно создать свой слот... и соединить его с сигналом.... в слоте обрабатываем что хотим и выводим во второй lineEdit
Записан
SimpleSunny
Гость
« Ответ #6 : Июль 30, 2010, 14:12 »

Такое необходимо делать в коде руками, т.е. создать слот и соединить его с сигналом textEdited().

В QtCreator выделите первый QLineEdit, нажмите ПКМ, выберете пункт перейти к слоту. QtCreator создаст слот с определленным именем, который будет автоматически связываться с выбранным сигналом.
Можно соединять также и руками, используя connect, чтобы имена слотов былы более информативными.
Записан
labview
Гость
« Ответ #7 : Июль 30, 2010, 14:13 »

Да, огромное спасибо, уже понял, отредактировал выше.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Июль 30, 2010, 15:47 »

>>И такое соединение называется слот.
категорически не верно. Соединение - это соединение.
Слот - это целевая функция соединения.

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

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

А функцию QObject::connect, как операцию по вставке шнурка в разъём (это и есть соединение)
« Последнее редактирование: Июль 30, 2010, 15:51 от lit-uriy » Записан

Юра.
labview
Гость
« Ответ #9 : Июль 30, 2010, 16:27 »

Спасибо, информации о коннекте мне как раз и не хватало.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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