2010-04-28 19 views
6

Bien, tengo un ejecutable Qt en el mismo directorio que un archivo logo.png.¿Cómo hacer que QWebKit muestre la imagen?

que llamar a los siguientes:

QString msg("<html><body><img src='logo.png' /></body></html>"); 

webView->setHtml(msg); 

donde webview es el puntero QWebKit

Sin embargo, cuando ejecuto el programa, la imagen no se muestra. Estoy ejecutando el programa desde el directorio donde está la imagen ... ¿por qué no se mostrará? ¡Esto me está volviendo loco!

+0

Todavía no puedo hacer que esto funcione. Intenté rutas absolutas, QUrl, etc. –

Respuesta

1
  1. Comprobar si Qt construir con png apoyo. También puedes probar otro formato de imagen.
  2. Intenta usar la ruta absoluta. Para mí esa variante funciona:

Código de ejemplo:

if (isPictureDirExists) 
    text.replace(QString("src=\""), QString("src=\"%1/img/") 
     .arg(conf.absImgFolder), Qt::CaseInsensitive); 

QString html = QString("<html><head><meta Content=\"Text/html; " \ 
         "CHARSET=Windows-1251\"></head><body>%1</body>" \ 
         "</html>").arg(text); 
webView->setHtml(html); 

Buena suerte.

Agregado: Me trataron de código cero con QWebkit de mi gran proyecto, y here is lo que tengo. El archivo de proyecto llamado Images.rar. Se combina con MS Visual C++. Construyo código de ese archivo con éxito con Qt 4.6.2.

También puede consultar la aplicación de vista previa de la carpeta de ejemplo Qt estándar. En mi host el camino es:

C:\Qt\4.6.2\examples\webkit\previewer 

Espero que ayude!

1

El problema son las restricciones de seguridad dentro de WebKit.

AFAIK la idea detrás de eso es evitar que las páginas HTML de Internet incluyan/referencian archivos en el disco duro, y por alguna razón una llamada también setHtml() hace que WebKit piense que el HTML no debe tener acceso a archivos en el disco (usando el esquema file://).

Creo que trabajé al respecto al dejar que WebKit sepa que el conjunto de HTML en realidad proviene del propio disco duro y se le debe permitir el acceso a los archivos locales, respectivamente.

void QWebView::setHtml (const QString & html, const QUrl & baseUrl = QUrl())

no puede probar aquí y ahora, pero se puede tratar de dar baseUrl algo así como file://abcd.

Además, la falta de compatibilidad con PNG puede ser un problema, por lo que debe comprobar si tiene habilitada la compatibilidad con PNG en su compilación de Qt.

Intente hacer referencia a una imagen PNG en la web (por ejemplo, http://files.iconfactory.net/news/CandyBar.png) y vea si aparece. Si lo hace, se admite PNG y el problema son las restricciones de seguridad dentro de WebKit.

+0

Intenté acceder a un archivo HTTP PNG, sin problemas. –

+0

Eche un vistazo a las políticas de seguridad de Qt WebKit. Creo que tienen algo de documentación sobre eso por ahora. – BastiBen

+0

+1: Usar el argumento 'baseUrl' funciona pero solo si uso una ruta absoluta parece. De manera molesta, pasar 'QUrl :: fromLocalFile (". ")' Como 'baseUrl' no funciona (a pesar de' QUrl.valid() 'que devuelve' true' para ese 'QUrl' en particular). – Troubadour

10

El logotipo.png puede no resolverse correctamente si no se proporciona una baseUrl adecuada.

Aquí hay un ejemplo. Tenga en cuenta que la aplicación debe ejecutarse desde el directorio que contiene logo.png, pero dummy.html no necesita existir. Simplemente se usa para proporcionar una baseUrl adecuada.

#include <QtCore> 
#include <QtGui> 
#include <QtWebKit> 

int main(int argc, char * argv[]) 
{ 
    QApplication app(argc, argv); 

    QUrl baseUrl = QUrl::fromLocalFile(QDir::current().absoluteFilePath("dummy.html")); 

    QString msg("<html><body><img src='logo.png' /></body></html>"); 

    QWebView *webView = new QWebView; 
    webView->setHtml(msg, baseUrl); 

    webView->show(); 

    return app.exec(); 
} 
+0

Lo intentaré cuando tenga la oportunidad. –

+0

Grrr, 'Qdir :: current()', ¿por qué no pensé en eso? :) – Troubadour

1

Estaba teniendo el mismo problema, y ​​finalmente funcionó.

Asegúrese de darle camino correcto en qurl, para obtener una imagen adecuada para leerlo

por ejemplo: archivo de imagen en C: /xxx/abc.png -> qurl tiene que ser algo como C:/xxx/yyy -> aaa debe estar en el mismo directorio con la imagen.

Al depurar en Qt su directorio actual es el directorio de compilación! no en debug/release dir ..

En el exe, obtiene el directorio actual real llamando al QDir :: current().

Cuestiones relacionadas