Russian Qt Forum
Ноябрь 23, 2024, 15:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Открытие ссылки в новом QWebView  (Прочитано 7043 раз)
IGreench
Гость
« : Декабрь 19, 2012, 23:07 »

Доброе время суток!

Пишу специализированный браузер для сайта, чтобы было что-то типа дестктопной версии.
С linkClicked(QUrl url) всё понятно. Переопределил метод, и вызываю при особых условиях load(url).
А вот, что делать с urlChanged(QUrl url)? Как переопределить метод (и какой метод) для запрета загрузки некоторых url?

Поискал, ничего не нашёл, где обошлось бы без особого шаманства с QNetwork...

Решение:
Завязываем changed на слот, в котором пишем аля
Код:
if (!siteName.contains("prog.org.ru"))
{  
    stop();
    back();
}


UPD: пока что временно нашёл, как обойти эту проблему. Но возникла новая...

Задача: есть два qwebview, на одном я захожу на сайт, авторизуюсь, работаю. Но определённые ссылки нужно открыть на втором qwebview. А так как параметры сессии отсутствуют у него, то не получается нужного результата. Как передать параметры сессии, не нашёл, есть идея - передовать post запросом параметры сессии, но это как то неправильно, и пока я не знаю, насколько это возможно сделать. Еще ковырялся с qwebpage, но смог только перенести состояние с первого qwebview на второй, с блокировкой первого.

Решение:
Как-то так.
Код
C++ (Qt)
QNetworkCookieJar *cookieJar = new QNetworkCookieJar();
webView1->page->networkAccessManager()->setCookieJar(cookieJar);
cookieJar->setParent(0);
webView2->page->networkAccessManager()->setCookieJar(cookieJar);
cookieJar->setParent(0);
2SimpleSunny Спасибо!

написал
Код:
webView_2->page()->networkAccessManager()->setCookieJar(webView->page()->networkAccessManager()->cookieJar());
webView_2->load(url);
и всё ништяк стало.

UPD:

Всем привет!
Возвращаюсь ко своим баранам.

Этот способ:
Завязываем changed на слот, в котором пишем аля
Код:
if (!siteName.contains("prog.org.ru"))
{  
    stop();
    back();
}
не работает так, как нужно. Нужно чтобы, первый webView не проходил по ссылке.
Я сделал две QWebPage. Работая с первой webPage, я перехватываю в urlChanged и linkClicked нужную ссылку и делаю setPage() от неё во второй webView. Но я не знаю, как отлавливать input'ы от второго webView (mouseEvents хотя бы) и применять непосредственно к этой webPage.

Решение:
в хедере:
Код:
static QWebPage *page1;
static QWebPage *page2;

в событиях urlChanged и linkClicked при нужной ссылке:
Код:
page2->networkAccessManager()->setCookieJar(page1->networkAccessManager()->cookieJar());
webView->setPage(page2);
webView->load(QUrl("http://..."));
webView_2->setPage(page1);
« Последнее редактирование: Март 10, 2013, 09:10 от IGreench » Записан
IGreench
Гость
« Ответ #1 : Декабрь 21, 2012, 12:51 »

Помогите пожалуйста! Очень очень надо...
Записан
Bepec
Гость
« Ответ #2 : Декабрь 21, 2012, 13:15 »

Завязываем changed на слот, в котором пишем аля
Код:
if (!siteName.contains("prog.org.ru"))
{   
    stop();
    back();
}
Записан
IGreench
Гость
« Ответ #3 : Декабрь 21, 2012, 14:08 »

Спасибо! Всё работает!

А можете подсказать, касательно клика по ссылке в одном qweview и её открытия в другом qwebview с настройками первого?
Записан
Bepec
Гость
« Ответ #4 : Декабрь 21, 2012, 14:17 »

ХЗ о каких настройках вы говорите. Если о сетевых, можно применить QNetworkSetting от первого на второй. Хотя мб я и ошибаюсь и они глобальные.
Записан
IGreench
Гость
« Ответ #5 : Декабрь 21, 2012, 19:42 »

На сайте пользователь авторизуется с помощью сессии (я про $_SESSION[]). Но другой qwebview же не знает, что это за сессия...
Записан
Bepec
Гость
« Ответ #6 : Декабрь 21, 2012, 19:58 »

Я не силён в internet технологиях, но эта сессия являет собой что? Кеш?
Записан
IGreench
Гость
« Ответ #7 : Декабрь 21, 2012, 20:26 »

я тоже не силён, но я знаю что это что-то типа куков)
Записан
SimpleSunny
Гость
« Ответ #8 : Декабрь 21, 2012, 20:53 »

Как-то так.
Код
C++ (Qt)
QNetworkCookieJar *cookieJar = new QNetworkCookieJar();
webView1->page->networkAccessManager()->setCookieJar(cookieJar);
cookieJar->setParent(0);
webView2->page->networkAccessManager()->setCookieJar(cookieJar);
cookieJar->setParent(0);
Записан
IGreench
Гость
« Ответ #9 : Декабрь 21, 2012, 21:39 »

2SimpleSunny Спасибо!

написал
Код:
ui->webView_2->page()->networkAccessManager()->setCookieJar(ui->webView->page()->networkAccessManager()->cookieJar());
ui->webView_2->load(url);
и всё ништяк стало.

Так и знал, что всё примерно так просто. Спасибо всем откликнувшимся!
Записан
IGreench
Гость
« Ответ #10 : Март 09, 2013, 23:15 »

Всем привет!
Возвращаюсь ко своим баранам.

Этот способ:
Завязываем changed на слот, в котором пишем аля
Код:
if (!siteName.contains("prog.org.ru"))
{  
    stop();
    back();
}
не работает так, как нужно. Нужно чтобы, первый webView не проходил по ссылке.
Я сделал две QWebPage. Работая с первой webPage, я перехватываю в urlChanged и linkClicked нужную ссылку и делаю setPage() от неё во второй webView. Но я не знаю, как отлавливать input'ы от второго webView (mouseEvents хотя бы) и применять непосредственно к этой webPage.

Буду рад любой помощи Улыбающийся

Зараннее спасибо
« Последнее редактирование: Март 09, 2013, 23:20 от IGreench » Записан
Bepec
Гость
« Ответ #11 : Март 09, 2013, 23:18 »

Класс менеджер тебе нужен по ходу, хотя мысль твоя не совсем мне ясна в час ночи Веселый
Записан
IGreench
Гость
« Ответ #12 : Март 10, 2013, 00:20 »

А что за класс менеджер?)

Всё... мне спать пора)
сделал qwebpage'ы статик и всё заработало.
ура! =)

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.368 секунд. Запросов: 21.