Russian Qt Forum

Qt => Работа с сетью => Тема начата: Elect от Январь 05, 2010, 00:35



Название: QWebKit открытие в новой вкладке
Отправлено: Elect от Январь 05, 2010, 00:35
Попробовал ради интереса создать окошко с QWebView, столкнулся с тем что не переходит по ссылкам которые должны открываться в новых вкладка. Например на яндексе если что либо набрать в поиски, а потом попробовать перейти по какому либо результату поиска, то не чего не произойдет. Полез в примеры, webkit/fancybrowser так поведение точно такое же. Скачал исходники arora но не смог разобраться как там это реализовано. Собственно вопрос, что происходит при клики на такую ссылку? может как то надо отлавливать такие события?


Название: Re: QWebKit открытие в новой вкладке
Отправлено: serg_hd от Январь 05, 2010, 11:39
а как именно ты осуществлял переход? Как вариант выуживать регвырами ссылки и грузить их без перехода с подстановкой нужного рефера.


Название: Re: QWebKit открытие в новой вкладке
Отправлено: Elect от Январь 05, 2010, 14:15
Переход осуществляю, кликом по ссылки. Но как узнать что клик был произведен именно по ссылки и выдернуть ее?


Название: Re: QWebKit открытие в новой вкладке
Отправлено: serg_hd от Январь 05, 2010, 15:32
Переход осуществляю, кликом по ссылки. Но как узнать что клик был произведен именно по ссылки и выдернуть ее?
А, а я думал как-то программно. Скажи что конкретно тебе надо сделать, так проще будет. Найти ссылку можно через findText() вроде бы, после окончания загрузки страницы. Для того указание рефера в заголовке и нужно, чтобы сказать загруженной странице откуда ты пришёл.
Для установки своих заголовков смотри эту (http://www.prog.org.ru/topic_11629_0.html) тему.


Название: Re: QWebKit открытие в новой вкладке
Отправлено: serg_hd от Январь 05, 2010, 15:34
кстати, этот баг насчёт отсутствия реакции на клик по ссылке (у которой target=_blank или сгенеренный яваскриптом) тоже давно заметил.


Название: Re: QWebKit открытие в новой вкладке
Отправлено: zenden от Январь 05, 2010, 15:56
Цитировать
QWebView * QWebView::createWindow ( QWebPage::WebWindowType type )   [virtual protected]

This function is called from the createWindow() method of the associated QWebPage, each time the page wants to create a new window of the given type. This might be the result, for example, of a JavaScript request to open a document in a new window.

это не подойдет?


Название: Re: QWebKit открытие в новой вкладке
Отправлено: Elect от Январь 07, 2010, 01:00
это не подойдет?
Нет, не подходит.
Пишу
Код
C++ (Qt)
void MainWindow::createWindow(QWebPage::WebWindowType type)
{
   qDebug() << "TEST";
}
 
В консоли не чего не появляется.

кстати, этот баг насчёт отсутствия реакции на клик по ссылке (у которой target=_blank или сгенеренный яваскриптом) тоже давно заметил.
И как это обойти?
Использую qt 4.5 может в 4.6 это поправили.


Название: Re: QWebKit открытие в новой вкладке
Отправлено: zenden от Январь 07, 2010, 14:33
Elect

вы не забыли сабклассить класс QWebView, а уже там переопределить метод QWebView * createWindow ( QWebPage::WebWindowType type ) ?

Похоже, что забыли.


Название: Re: QWebKit открытие в новой вкладке
Отправлено: Elect от Январь 07, 2010, 20:08
Да, действительно я пытался переопределить метод в классе на котором находился qwebview, а надо было создать клаас отнаследованый от qwebview и там переопределить.
Спасибо.


Название: Re: QWebKit открытие в новой вкладке
Отправлено: serg_hd от Январь 16, 2010, 18:26
Сначала тоже стал так делать, но в результате осуществил по-другому:
Код
Java
this.myWebView.page().setLinkDelegationPolicy(LinkDelegationPolicy.DelegateAllLinks);
this. myWebView.linkClicked.connect(this, "setLink(QUrl)");
 
public void setLink(QUrl url)
{
this.myWebView.load(url);
}
 
Такой способ показался мне удобнее.


Название: Re: QWebKit открытие в новой вкладке
Отправлено: Ignis от Май 22, 2011, 12:59
Подскажите, а что именно должно произойти после следующих действий?

Код:
view->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
    connect(view, SIGNAL(linkClicked(QUrl)), SLOT(setLink(QUrl &url)));

Код:
void MainWindow::setLink(QUrl url)
{
    view->load(url);
}
Переход по ссылкам у меня и до этого работал, а новую вкладку создать не получается.