как идентифицировать сигнал, идентифицировать сигнал |
Здравствуйте, гость ( Вход | Регистрация )
как идентифицировать сигнал, идентифицировать сигнал |
fantom |
30.1.2009, 17:45
Сообщение
#21
|
Студент Группа: Участник Сообщений: 47 Регистрация: 29.1.2009 Пользователь №: 515 Спасибо сказали: 1 раз(а) Репутация: 1 |
Точно! Спасибо все работает.
И еще вопрос. Индекс сигнала у объекта всегда постоянен в рамках неизменности описания класса? В итоге что вышло. Чтобы получить имя сигнала вызвавшего слот в Qt 4.4.x можно сделать так.
Хотя кончено это не совсем правомерно но работает. Надо тролям писать чтобы реализовали метод получения имени сигнала! |
|
|
ViGOur |
31.1.2009, 11:30
Сообщение
#22
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
В итоге что вышло. Чтобы получить имя сигнала вызвавшего слот в Qt 4.4.x можно сделать так. Можно упростить:
|
|
|
Litkevich Yuriy |
31.1.2009, 11:54
Сообщение
#23
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Обсуждение связанное с Vedga перенес в существующую тему. тык
|
|
|
SABROG |
31.1.2009, 13:23
Сообщение
#24
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
так как мне необходимо идентифицировать стандартные сигналы qt. Например от кнопок и др элементов. Этот код работает только в пределах одного объекта, который выпускает и ловит сигнал. Т.е. при нажатии на кнопку мы уже не получим имя сигнала, которое было у QPushButton'а. А d_ptr чужих объектов естественно закрыт. Кстати без reinterpret_cast тоже работает:
Сообщение отредактировал SABROG - 31.1.2009, 13:26 |
|
|
fantom |
2.2.2009, 17:34
Сообщение
#25
|
Студент Группа: Участник Сообщений: 47 Регистрация: 29.1.2009 Пользователь №: 515 Спасибо сказали: 1 раз(а) Репутация: 1 |
Этот код работает только в пределах одного объекта, который выпускает и ловит сигнал. Ты прав. Я об этом не подумал. Но это лечится. Достаточно ввести новый класс
И теперь уже все объекты от которых надо идентифицировать сигналы унаследовать уже от него, а не от QObject Проверил исправленный код у меня вроде работает. |
|
|
SABROG |
2.2.2009, 18:45
Сообщение
#26
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
fantom Этот код работает только в пределах одного объекта, который выпускает и ловит сигнал. Ты прав. Я об этом не подумал. Но это лечится. Достаточно ввести новый класс
И теперь уже все объекты от которых надо идентифицировать сигналы унаследовать уже от него, а не от QObject Проверил исправленный код у меня вроде работает. Чувствую, что где-нибудь в другом месте косяк потом с этим вылезет. Например с чужими плагинами или библиотеками. |
|
|
fantom |
2.2.2009, 19:18
Сообщение
#27
|
Студент Группа: Участник Сообщений: 47 Регистрация: 29.1.2009 Пользователь №: 515 Спасибо сказали: 1 раз(а) Репутация: 1 |
Ну чтобы не вылезло можешь в каждом своем наследнике от QObject писать
Этим мы просто говорим чтобы поле d_ptr стало public. Тогда никаких проблем быть не должно. Конечно понимаю что все это изврат и костыли, но если очень надо то больше вариантов я не знаю. |
|
|
SABROG |
2.2.2009, 20:39
Сообщение
#28
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
fantom Ну чтобы не вылезло можешь в каждом своем наследнике от QObject писать
Этим мы просто говорим чтобы поле d_ptr стало public. Тогда никаких проблем быть не должно. Конечно понимаю что все это изврат и костыли, но если очень надо то больше вариантов я не знаю. Я говорю об объектах, реализация которых скрыта в файлах библиотек. Есть только хедер и .lib/.a файл. И о проектах в исходники которых тебе не захочется лезть. Например комплексные, встраиваемые виджеты с кучей дочерних элементов. Придется много кода переписать, чтобы их всех "отнаследовать". Может это можно как-то по-нормальному сделать? Если все коннекты мы сами делаем, то почему-бы не "запитать" пришедший сигнал на наш слот-ретранслятор, например slt_btn_clicked(). Далее emitим' сигнал дальше на обработчик:
Соотв. все зеркальные сигналы законнектить на один слот.в нас. |
|
|
fantom |
3.2.2009, 17:01
Сообщение
#29
|
Студент Группа: Участник Сообщений: 47 Регистрация: 29.1.2009 Пользователь №: 515 Спасибо сказали: 1 раз(а) Репутация: 1 |
SABROG ты сам запутался и меня запутал. короче никаких using и наследований использывать не надо. Вот так все работает.
|
|
|
SABROG |
3.2.2009, 18:02
Сообщение
#30
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
ну теперь, по идее, должно все работать.
|
|
|
Текстовая версия | Сейчас: 26.11.2024, 21:35 |