Russian Qt Forum
Ноябрь 25, 2024, 00:43
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
сигнатуры сигналов/слотов в метаметоде и SIGNAL/SLOT макросы
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: сигнатуры сигналов/слотов в метаметоде и SIGNAL/SLOT макросы (Прочитано 9213 раз)
iks
Гость
Re: сигнатуры сигналов/слотов в метаметоде и
«
Ответ #15 :
Июнь 14, 2011, 15:46 »
Ну по простому, сигнал сам по себе, слот тоже живет отдельной жизнью, они связаны через посредника который слушает определеный сигнал, из указаного ему места и тупо отправляет в слот.
У меня есть проги где несколько виджетов получают инфу от одного сигнала, но там передоваемая инфа, QList и слот принимая ее уже смотрит если первая строка не совпадает с его меткой то он не обращает внимания на то что пришло, если совпала то обрабатывает
«
Последнее редактирование: Июнь 14, 2011, 15:48 от iks
»
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: сигнатуры сигналов/слотов в метаметоде и SIGNAL/SLOT макросы
«
Ответ #16 :
Июнь 14, 2011, 17:59 »
не понятно, к чему все это iks написал, но явно не в ту степь
-----
в общем, пока сделал вариант 2, вроде работает - для тестирования приложение грузит в себя 2 почти одинаковые DLL, в каждой по объекту-истчнику, и он же приемник, приложение формирует при загрузке список загруженных объектов, и привязывается к объектам, чтобы обслуживать связывание сигналов и слотов
когда какому-то объекту вдруг приспичит поменять привязку сигнала, он дергает сигнал, по которому в приложении создается объект, получающий сигнатуру того сигнала или слота, подключение которого надо поменять, он формирует список всех противоположных (для сигнала - слотов, для слота - сигналов) методов других загруженных объектов, и показывает список в листвиджете, в окошке, с флажками вкл-выкл (флажки ессно устанавливаются по состоянию подклчюено или нет)
можно поменять состояния флажков, указав тем самым, новые подключения для текущего сигнала или слота, нажать ОК, и все новые соединения будут установлены, а снятые разорваны...
чтобы все это работало, надо соблюдать одно требование: должны совпадать не только параметры сигнала и слота, которые могут быть соединены, но и их имена - проверка допустимости соединения производится по совпадению имен функций, это специально, чтобы нельзя было соединить абы что с абы чем, только из-за совпадения параметров
пока поиграюсь с таким вариантом, но потом как-нибудь, наверно все-таки переделаю на 1й вариант, с отдельной таблицей, он даст важный бонус - возможность показа не имен классов и методов в них, а произвольные смысловые названия, в том числе, по-русски, но самое главное - соединения так будет проще сохранять и загружать при запуске
мораль - динамически переключать сигналы и слоты друг с другом, по прямому указанию пользователя - не является нерешаемой задачей, и делается относительно несложно
можно будет потом как-нибудь и графический редактор наваять, чтобы просто можно было линии тянуть и ими соединять... и даже нужно будет
«
Последнее редактирование: Июнь 14, 2011, 22:13 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: сигнатуры сигналов/слотов в метаметоде и SIGNAL/SLOT макросы
«
Ответ #17 :
Июнь 15, 2011, 14:50 »
.опа - чтобы при соединении сохранять о нём информацию, надо написать надстройки над QObject::connect() и QObject::disconnect, над разными вариантами, то есть, сделать класс-надстройку над самом QObject, а это применимо только в небольшом числе случаев, если объект наследует QObject напрямую (вариант переписывания QObject в исходниках Qt не рассматривается в принципе, поскольку система может пойти на сертификацию)
никаких других вариантов нет, от connectNotify нет никакого толка, поскольку он никак не получает информацию о подключаемом слоте
есть только один вариант узнать, подключен ли сигнал к слоту - это "2-й способ", описанный выше - прошерстить таблицу объектов, для каждого проверить подключение к его метаметодам, правда есть оказывается способ сделать это немного элегантнее - не отключать и потом подключать снова, а попытаться подключить с параметром Qt::UniqueConnection, тогда если уже подключено, то повторная попытка вернет ошибку, а если ошибки нет, то отключить
Записан
2^7-1 == 127, задумайтесь...
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...