2011-08-05 10 views
5

estoy usando un QWebView de esta manera:QWebView no abrir vínculos en nueva ventana y se inicia la aplicación externa para manejar pdf

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

Y funciona. Puedo ver la página html que quiero. El problema es esto. De forma predeterminada, si hago clic con el botón derecho en un enlace, aparece la acción "Abrir en nueva ventana", pero si hago clic en él, no pasa nada. Si "clic izquierdo" en el mismo enlace funciona. Entonces, el problema es que QWebView no abre ventanas nuevas. ¿Alguien sabe por qué?

Tengo otro problema. Algunos enlaces son archivos pdf, por lo que espero que QWebView me solicite que los descargue o ejecute una aplicación para abrirlos. Pero nada sucede en su lugar. Creo que el problema está relacionado con el hecho de que QWebView no permite abrir ventanas nuevas y no en el pdf.

Obviamente probé la página con un navegador web y todo funciona bien, por lo que el problema está en algunas configuraciones de QWebView.

¿Alguien sabe cómo hacer que QWebView abra ventanas nuevas cuando sea necesario?

Notas:

  • todos los enlaces son recursos locales.

  • Los enlaces HTML utilizan esta sintaxis (y trabaja):

<a href="./something.htm" TARGET="_parent">Some link</a> 
  • El enlace a los archivos PDF Utilice esta sintaxis (no pasa nada cuando hago clic):
<a href="./pdf/mydoc.pdf" TARGET="pdfwin">Some pdf</a> 
+0

Parece que si tiene un 'Click Me', tiene el mismo problema. – jdborg

Respuesta

7

Trate de manejar los ticks por su cuenta. Aquí hay un ejemplo que puede guiarte. Aunque no lo he compilado.

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); 
    } 

Tenga en cuenta que si el HTML se está visualizando pueden contiene enlaces relativos/internos a otras partes de sí mismo, entonces se debe utilizar en lugar de QWebPage::DelegateExternalLinksQWebPage::DelegateAllLinks.

+0

Muchas gracias por la respuesta – Luca

+0

Simplemente corrija la segunda línea a: ventana-> página() -> setLinkDelegationPolicy (QWebPage :: DelegateAllLinks); – Juanin

+1

y no es ventana-> setContextMenuPolicy (Qt :: ContextMenu); ?? – osirisgothra

1

La respuesta anterior es informativa, pero podría verse abrumada por esta pregunta. Conectar señales a QWebPage :: action (OpenLinkInNewWindow) o anular QWebPage :: triggerAction debería resolver este problema.

+2

cómo implementar esta "acción QWebPage :: (OpenLinkInNewWindow)"? – jondinham

Cuestiones relacionadas