crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Как отправить дополнительные данные слоту?
BRE
  опции профиля:
сообщение 19.4.2010, 15:16
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Я бы добавил для проверки:
QObject *obj = QObject::sender();
qDebug() << obj;
QWebFrame *frame = qobject_cast<QWebFrame *>(obj);
Q_ASSERT( frame );
QString url = frame->url().toString();

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
smackthat
  опции профиля:
сообщение 19.4.2010, 15:31
Сообщение #12


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 18.10.2009
Пользователь №: 1163

Спасибо сказали: 0 раз(а)




Репутация:   0  


Оказалось, что вылетает на этой строке:
QString url = frame->url().toString();

непойму почему. Неужели фрейм не возвращается? Код ошибки E:\dev\win\12345\debug\12345.exe exited with code -1073741819


Цитата(BRE @ 19.4.2010, 15:16) *
Я бы добавил для проверки:
QObject *obj = QObject::sender();
qDebug() << obj;
QWebFrame *frame = qobject_cast<QWebFrame *>(obj);
Q_ASSERT( frame );
QString url = frame->url().toString();

попробывал, но при компиляции получил ошибку:
error: invalid use of incomplete type 'struct QDebug'

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 19.4.2010, 15:48
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(smackthat @ 19.4.2010, 16:31) *
error: invalid use of incomplete type 'struct QDebug'

Добавь в файл
#include <QDebug>

Но почти уверен, что qobject_cast возвращает 0.
Почему... нужно разбираться, возможно сигнал отсылается не самим объектом QWebFrame.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 19.4.2010, 15:56
Сообщение #14


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(BRE @ 19.4.2010, 16:48) *
Почему... нужно разбираться, возможно сигнал отсылается не самим объектом QWebFrame.

непонятно. это как?

может слот-обработчик вызывается не через сигнально-слотное соединение, а напрямую, как обычный метод через object->method()?


П.С.
проверка qobject_cast<QWebFrame*>(sender()) на ноль обязательно нужна т.к. слот можно вызвать как обычный метод.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 19.4.2010, 16:25
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(kwisp @ 19.4.2010, 16:56) *
непонятно. это как?

Это я про то, что возможно (?) сигнал отсылает объект, аналогичный QNetworkReply для QNetworkAccessManager.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 19.4.2010, 17:11
Сообщение #16


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


BRE,
а понял.
ты имеешь ввиду что он в приведении qobject_cast<QWebFrame*>(QObject::sender()) c типом к которому приводит(QWebFrame*) не угадал.
ну можно проверить просто QObject::sender() на ноль, если не ноль значит объект есть который сигнал высылал уже что то.
хотя я сомневаюсь что он с типом не угадал, скорее всего вызывает слот без вызова сигнала.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 19.4.2010, 17:20
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(kwisp @ 19.4.2010, 18:11) *
BRE,
а понял.
ты имеешь ввиду что он в приведении qobject_cast<QWebFrame*>(QObject::sender()) c типом к которому приводит(QWebFrame*) не угадал.
ну можно проверить просто QObject::sender() на ноль, если не ноль значит объект есть который сигнал высылал уже что то.
хотя я сомневаюсь что он с типом не угадал, скорее всего вызывает слот без вызова сигнала.

Для проверки можно подробно расспросить сам объект "а кто он такой", с помощью QMetaObject.
QObject *obj = QObject::sender();
Q_ASSERT( obj );
qDebug() << obj->metaObject()->className();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.4.2010, 17:22
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(BRE @ 19.4.2010, 19:16) *
Я бы добавил для проверки:
вообще проверку обязательно надо делать, это я для краткости написал.
Я обычно делаю так:
QObject *obj = QObject::sender();
QWebFrame *frame = qobject_cast<QWebFrame *>(obj);
if (!frame){
  qDebug() << "Unable cast to QWebFrame";
  qDebug() << "Sender is " << obj->metaObject()->className();
  return;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
smackthat
  опции профиля:
сообщение 22.4.2010, 20:47
Сообщение #19


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 18.10.2009
Пользователь №: 1163

Спасибо сказали: 0 раз(а)




Репутация:   0  


Litkevich Yuriy, BRE, kwisp
Господа, большое вам спасибо! Как оказалось, сигнал отправлялся не QWebFrame, а QWebView. Теперь же благополучно достается вся нужная инфа (url и html-код странички). Дополнительную информацию (которую я хотел отпровлять вместе с сигналом), о том, что делать с страничкой собираюсь хранить в структуре типа map. Ключем будет url, а данными - описание (что делать страничкой).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 12:55