QWebView не открывает ссылки в новом окне и не запускает внешнее приложение для обработки pdf - PullRequest
5 голосов
/ 05 августа 2011

Я использую QWebView следующим образом:

QWebView *window = new QWebView();
window->setUrl(QString("my url"));
window->show();

И это работает. Я вижу HTML-страницу, которую я хочу. Проблема в этом. По умолчанию, если я «щелкаю правой кнопкой мыши» по ссылке, отображается действие «Открыть в новом окне», но если я нажимаю на нее, ничего не происходит. Если я "щелкну левой кнопкой мыши" по той же ссылке, это сработает. Так что проблема в том, что QWebView не открывает новые окна. Кто-нибудь знает почему?

У меня есть другая проблема. Некоторые ссылки представляют собой PDF-файл, поэтому я ожидаю, что QWebView попросит меня загрузить его или запустить приложение для его открытия. Но ничего не происходит вместо этого. Я думаю, что проблема связана с тем, что QWebView не разрешает открывать новые окна, а не в pdf.

Очевидно, что я протестировал страницу с веб-браузером, и все работает хорошо, поэтому проблема в некоторых настройках QWebView.

Кто-нибудь знает, как заставить QWebView открывать новые окна при необходимости?

Примечания:

  • все ссылки являются локальными ресурсами.

  • HTML-ссылки используют этот синтаксис (и они работают):

 <a href="./something.htm" TARGET="_parent">Some link</a>
  • Ссылка на pdfs использует этот синтаксис (при нажатии ничего не происходит):
<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a>

Ответы [ 2 ]

8 голосов
/ 05 августа 2011

Попробуйте справиться с пиками самостоятельно.Вот пример, который может вам помочь.Хотя я не скомпилировал его.

    QWebView *window = new QWebView();
    window->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);//Handle link clicks by yourself
    window->page()->setContextMenuPolicy(Qt::NoContextMenu); //No context menu is allowed if you don't need it
    connect( window, SIGNAL( linkClicked( QUrl ) ),
                  this, SLOT( linkClickedSlot( QUrl ) ) );

    window->setUrl(QString("my url"));
    window->show();

    //This slot handles all clicks    
    void MyWindow::linkClickedSlot( QUrl url )
    {
        if (url.ishtml()//isHtml does not exist actually you need to write something like it by yourself
             window->load (url);
        else//non html (pdf) pages will be opened with default application
            QDesktopServices::openUrl( url );
    }

Обратите внимание, что если отображаемый HTML-код может содержать относительные / внутренние ссылки на другие части самого себя, то вам следует использовать QWebPage::DelegateExternalLinks вместо QWebPage::DelegateAllLinks.

1 голос
/ 14 марта 2012

Приведенный выше ответ носит информативный характер, но может быть ошеломлен этим вопросом. Подключение сигналов к QWebPage :: action (OpenLinkInNewWindow) или переопределение QWebPage :: triggerAction должны решить эту проблему.

...