Russian Qt Forum
Ноябрь 23, 2024, 15:08
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Изменение типа сигнала
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Изменение типа сигнала (Прочитано 7874 раз)
ElderOrb
Гость
Изменение типа сигнала
«
:
Июль 15, 2005, 14:29 »
Возможен ли сабж?.. То есть можно ли из сигнала signal(const QString&) сделать signal(int) или signal() ? Это может понадобиться для реализации, к примеру, следующего:
Имеется виджэт в котором размещены разнообразные контролы (лайнэдиты, комбобоксы и радиобуттоны). Хотелось бы чтобы при изменении значения любого контрола в кэпшене виждэта выставлялся признак модификации.
Решение "в лоб" (сигналы textChanged(const QString&) для QLineEdit, editTextChanged(const QString&) для QComboBox и buttonClicked(QAbstractButton*) для группы радиобуттонов подключить к слотам setModifier(const QString&) и setModifier(QAbstractButton*) ) слишком громоздкое.
Тут отлично подошёл бы QSignalMapper если бы каждый контрол при своей модификации испускал сигнал одного и того же типа. Проблема в том, что признак модификации QLineEdit-а - сигнал textChanged и сигнал buttonClicked для группы радиобуттонов имеют разные параметры, и "красиво" использовать сигналмэппер не получится.
Существует ли какой-нибудь простой способ поменять тип сигнала (с потерей переносимой им ноформации конечно)?
Записан
Zmey
Гость
Re: Изменение типа сигнала
«
Ответ #1 :
Июль 15, 2005, 16:32 »
Цитата: "ElderOrb"
Возможен ли сабж?.. То есть можно ли из сигнала signal(const QString&) сделать signal(int) или signal() ? Это может понадобиться для реализации, к примеру, следующего:
Имеется виджэт в котором размещены разнообразные контролы (лайнэдиты, комбобоксы и радиобуттоны). Хотелось бы чтобы при изменении значения любого контрола в кэпшене виждэта выставлялся признак модификации.
Решение "в лоб" (сигналы textChanged(const QString&) для QLineEdit, editTextChanged(const QString&) для QComboBox и buttonClicked(QAbstractButton*) для группы радиобуттонов подключить к слотам setModifier(const QString&) и setModifier(QAbstractButton*) ) слишком громоздкое.
Тут отлично подошёл бы QSignalMapper если бы каждый контрол при своей модификации испускал сигнал одного и того же типа. Проблема в том, что признак модификации QLineEdit-а - сигнал textChanged и сигнал buttonClicked для группы радиобуттонов имеют разные параметры, и "красиво" использовать сигналмэппер не получится.
Существует ли какой-нибудь простой способ поменять тип сигнала (с потерей переносимой им ноформации конечно)?
А можешь сделать, чтобы из этих сигналов испускался твой один самодельный сигнал, а потом ты этот сигнал ловишь и...
Типа того:
connect( aButton, SIGNAL(clicked()), SIGNAL(myUsefulSignal()) );
Записан
ElderOrb
Гость
Изменение типа сигнала
«
Ответ #2 :
Июль 15, 2005, 16:36 »
Чего-то в этом духе мне и хотелось бы добиться... Но вот как? Не могу же я подключить сигнал одного типа к сигналу другого?.. Или могу?
Записан
L.Marvell
Гость
Изменение типа сигнала
«
Ответ #3 :
Июль 15, 2005, 16:56 »
Цитата: "ElderOrb"
Чего-то в этом духе мне и хотелось бы добиться... Но вот как? Не могу же я подключить сигнал одного типа к сигналу другого?.. Или могу?
Цитата из книги Jasmin Blanchette, Mark Summerfield (хотя возможно я неправильно понял постановку задачи):
"Сигнал может быть подключен к другому сигналу:
connect(lineEdit, SIGNAL(textChanged(const QString &)),
this, SIGNAL(updateRecord(const QString &)));
Когда посылается первый сигнал, то вслед за ним подается и второй. С точки зрения программы, соединение типа сигнал-сигнал ничем не отличается от соединения типа сигнал-слот."
Записан
ElderOrb
Гость
Изменение типа сигнала
«
Ответ #4 :
Июль 15, 2005, 17:01 »
Проблема в том что в моём случае сигналы разных типов... А насколько я знаю подключения вида
connect(sender, SIGNAL(senderSignal(const QString& )),
receiver, SLOT(receiverSlot(in))) , (т.е. подключения между сигналами разных типов) невозможны.
Записан
KOSchMAR
Гость
Изменение типа сигнала
«
Ответ #5 :
Июль 15, 2005, 23:46 »
если с потерей информации, то что мешает использовать SLOT(MyVoidSlot())?
Записан
ElderOrb
Гость
Изменение типа сигнала
«
Ответ #6 :
Июль 16, 2005, 12:27 »
действительно ничего! ж) По каким-то причинам я был убеждён что ЛЮБЫЕ соединения между сигналами разных типов невозможны. Оказалось, что
connect(ui.lineEdit, SIGNAL(textChanged( const QString & )), mapper, SLOT(map())); отлично работает!.. Проблема решена и спасибо всем откликнувшимся!
Записан
KOSchMAR
Гость
Изменение типа сигнала
«
Ответ #7 :
Июль 16, 2005, 13:15 »
Соединяемые сигналы и слоты должны иметь идентичные сигнатуры (т.е. количество и типы входных аргументов):
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),
this, SLOT(processReply(int, const QString &)));
Исключение составляет случай, когда сигнал имеет большее число аргументов, чем слот. В этом случае "лишние" аргументы просто не передаются в слот. (это из книги Бланшете "Разработка графического интерфейса с помощью библиотеки Qt3" глава 2.2)
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...