Как отправить дополнительные данные слоту? |
Здравствуйте, гость ( Вход | Регистрация )
Как отправить дополнительные данные слоту? |
smackthat |
18.4.2010, 22:10
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 18.10.2009 Пользователь №: 1163 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день. У меня один и тот же сигнал (QWebFrame::loadFinished) отправляется с разных функций и мне нужно, чтобы при обработке этого сигнала передавались дополнительные данные. Как это можно организовать?
Тоесть допустим я загружаю одну страничку и после загрузки обрабатываю одним способом, другую страничку другим. Как можно указать сигналу каким образом обрабатывать? Как передать в сигнал аргумент? |
|
|
Litkevich Yuriy |
18.4.2010, 22:33
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Как передать в сигнал аргумент? сигнал имеет заранее определённую структуру и аргумент помещает отправитель сигнала. Как и любая функция, у которой заранее определено кол-во аргументов, так и у сигнала, на ходу ничего поменять нельзя Можно попробовать, если структура программы позволяет, сделать промежуточный (дополнительный) слот и сигнал. Первый сигнал прийдёт в промежуточный слот, а он уже пошлёт дополнительный сигнал (самописаный), с неким дополнительным параметром. |
|
|
smackthat |
19.4.2010, 12:39
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 18.10.2009 Пользователь №: 1163 Спасибо сказали: 0 раз(а) Репутация: 0 |
Попробую с другого конца пояснить свою проблему: я хочу написать программу, которая делает примерно следующее:
Проблема тут заключается в том, что загрузка страничек происходит паралельно: тоесть покопаться в уже загруженной страничке я могу только по сигналу loadFinished. Но как сигнал может знать, что делать в загруженной страничке (ведь это может быть или http://website.com/page/3/ или http://google.com/search/query=авто). Поэтому я и хочу как-то передать дополнительную информацию, чтобы обработчик сигнала знал, что делать. Помоему в этом случае самописный сигнал не подходит (насколько я понял). Помогите решить эту задачу, уже 3й день мучаюсь. |
|
|
Andrewshkovskii |
19.4.2010, 12:46
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Юрий тебе уже написал, что проще всего самописный сигнал, который идет от слота, принимающего loadFinished. Почему же так нельзя?
Пример : Раскрывающийся текст
Раскрывающийся текст
Сообщение отредактировал Andrewshkovskii - 19.4.2010, 13:17
Прикрепленные файлы
|
|
|
kwisp |
19.4.2010, 13:14
Сообщение
#5
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
smackthat,
можно воспользоваться QObject::sender() в слоте обработчике абсолютно всех сигналов QWebFrame::loadFinished(), полученный указатель на QObject приводить с помощью qobject_cast<>() к указателю на QWebFrame, вытаскивать с помощью QWebFrame::url().toString() тукущую страничку, получается последнююю загруженную, и в соовтетсвии с полученным результатом действовать. |
|
|
Andrewshkovskii |
19.4.2010, 13:18
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Мне кажется он не может разобраться, как передать данные сигнала+ какие-то свои данные, и насколько я понял, ему не хочется смотреть содержимое страницы в этом случае, а лишь по условию её обрабатывать. Может я не так понимаю - поправьте.
|
|
|
smackthat |
19.4.2010, 14:03
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 18.10.2009 Пользователь №: 1163 Спасибо сказали: 0 раз(а) Репутация: 0 |
2 kwisp
я тут нашел такую штуку: все объекты наследуются от QObject, в котором можно задать свои параметры через setProperty() и потом их достать через property(). А доступ к property через QObject::sender(). Похоже это, то что я искал. Теперь для каждого созданного QWebFrame буду задавать параметры, которые укажут как обрабатывать сигнал loadFinished. Цитата Мне кажется он не может разобраться, как передать данные сигнала+ какие-то свои данные да именно, но сам сигнал loadFinished не несет с собой никаких данных или нет? |
|
|
kwisp |
19.4.2010, 14:17
Сообщение
#8
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
smackthat,
немного не пойму. в соответсвии с чем ты будешь формировать данные, которые поместишь с помощью setProperty() в объект класса наследника QObject? если в сооветвествии с адресом загружаемой страничкой то эта лишняя работа. через url() все можно получить без property(). тебе ведь надо знать на какой страничке находится объект QWebFrame в момент прихода loadFinished от этого объекта? так ведь? |
|
|
smackthat |
19.4.2010, 15:06
Сообщение
#9
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 18.10.2009 Пользователь №: 1163 Спасибо сказали: 0 раз(а) Репутация: 0 |
smackthat, немного не пойму. в соответсвии с чем ты будешь формировать данные, которые поместишь с помощью setProperty() в объект класса наследника QObject? если в сооветвествии с адресом загружаемой страничкой то эта лишняя работа. через url() все можно получить без property(). тебе ведь надо знать на какой страничке находится объект QWebFrame в момент прихода loadFinished от этого объекта? так ведь? я хочу хранить в property() режим обработки. Например: GET_TITLE (не <title></title>), GET_KEYWORDS и так далее. Можно впринципе обойтись и url, но так будет удобнее. И ты не подскажешь как привести указатель к типу QWebFrame с использованием qobject_cast<>? Так чтоли QObject::sender(qobject_cast<QWebFrame>*)->url() ? пытаюсь достать url странички из обработчика сигнала loadFinished:
Компилится нормально, но когда доходит до выполнения этой строки программа вылетает. В чем ошибка? |
|
|
Litkevich Yuriy |
19.4.2010, 15:13
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Делай почастям, не заблудишся:
|
|
|
Текстовая версия | Сейчас: 22.11.2024, 21:59 |