2010-04-28 10 views
6

ठीक है, मेरे पास एक फ़ाइल logo.png फ़ाइल के समान निर्देशिका में निष्पादन योग्य है।छवि प्रदर्शित करने के लिए QWebKit कैसे प्राप्त करें?

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

webView->setHtml(msg); 

जहां webviewQWebKit सूचक

है हालांकि, जब मैं इस कार्यक्रम पर अमल, छवि प्रदर्शित नहीं करता है:

मैं निम्नलिखित कहते हैं। मैं उस निर्देशिका से प्रोग्राम निष्पादित कर रहा हूं जिसमें छवि है ... यह क्यों प्रदर्शित नहीं होगा? यह मुझे पागल कर रहा है!

+0

मैं अभी भी इस काम करने के लिए नहीं मिल सकता है। मैंने कोशिश की पूर्ण पथ, QUrl के, आदि –

उत्तर

1
  1. चेक, अगर क्यूटी png समर्थन के साथ निर्माण। इसके अलावा आप अन्य छवि प्रारूप का प्रयास कर सकते हैं।
  2. पूर्ण पथ का उपयोग करने का प्रयास करें। मेरे लिए है कि संस्करण काम करता है:

नमूना कोड:

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

गुड लक।

जोड़ा गया: मैं अपने विशाल परियोजना से QWebkit साथ खरोंच कोड की कोशिश की, और here is मैं क्या मिल गया है। प्रोजेक्ट फ़ाइल इमेज.रार कहा जाता है। यह एमएस विजुअल सी ++ के साथ संयुक्त है। मैं क्यूटी 4.6.2 के साथ सफलतापूर्वक उस संग्रह से कोड बना देता हूं।

इसके अलावा, आप मानक क्यूटी उदाहरण फ़ोल्डर से प्रीव्यूअर एप्लिकेशन पर लग सकता है। मेरे मेजबान पर पथ है:

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

आशा है कि यह मदद!

1

समस्या वेबकिट के भीतर सुरक्षा प्रतिबंध है।

AFAIK कि पीछे विचार यह इंटरनेट से HTML पृष्ठों को रोकने के लिए शामिल करने के लिए हार्ड डिस्क पर/संदर्भ फ़ाइलों है, और किसी कारण के लिए एक कॉल भी setHtml() वेबकिट लगता है कि एचटीएमएल पर फ़ाइलों तक पहुँचने की अनुमति नहीं दी जानी चाहिए बनाता है डिस्क (file:// स्कीमा का उपयोग कर)।

मुझे लगता है कि मैंने वेबकिट को यह बताकर इस पर काम किया है कि सेट HTML वास्तव में हार्ड डिस्क से आता है और इसे क्रमशः स्थानीय फ़ाइलों तक पहुंचने की अनुमति दी जानी चाहिए।

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

इसे यहाँ और अब का परीक्षण नहीं किया जा सकता है, लेकिन आप baseurl देने के लिए कुछ file://abcd तरह की कोशिश कर सकते।

इसके अलावा, पीएनजी समर्थन की कमी एक समस्या हो सकती है, इसलिए आपको यह जांचना चाहिए कि क्या आपके क्यूटी निर्माण में पीएनजी समर्थन सक्षम है या नहीं।

वेब पर एक पीएनजी छवि के संदर्भ में प्रयास करें (उदाहरण के लिए http://files.iconfactory.net/news/CandyBar.png), और देखें कि यह दिखाया गया है या नहीं। यदि ऐसा होता है, तो पीएनजी समर्थित है और समस्या वेबकिट के भीतर सुरक्षा प्रतिबंध है।

+0

एक HTTP PNG फ़ाइल तक पहुँचने की कोशिश की - उस के साथ कोई समस्या नहीं। –

+0

क्यूटी वेबकिट की सुरक्षा नीतियों पर नज़र डालें। मुझे लगता है कि उनके पास अब तक कुछ दस्तावेज हैं। – BastiBen

+0

+1: 'baseUrl' तर्क काम करता है का उपयोग करना है, लेकिन केवल अगर मैं एक पूर्ण पथ ऐसा लगता है का उपयोग करें। कष्टप्रद, 'QURL :: सेLocalFile ("। ")' ''UUUL' 'के रूप में कार्य नहीं करता है (उस विशेष' QUrl' के लिए' QUrl.valid() '' सत्य' लौटने के बावजूद)। – Troubadour

10

लोगो।अगर उपयुक्त आधार यूआरएल नहीं दिया जाता है तो पीएनजी ठीक तरह से हल नहीं किया जा सकता है।

यहाँ एक उदाहरण है। ध्यान दें कि एप्लिकेशन logo.png युक्त निर्देशिका से चलाना चाहिए, लेकिन dummy.html की आवश्यकता नहीं है। इसका उपयोग सिर्फ उचित आधार प्रदान करने के लिए किया जाता है।

#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

मुझे मौका मिलने पर मैं कोशिश करूंगा। –

+0

गरर, 'Qdir :: वर्तमान()', क्यों मुझे लगता है कि के बारे में सोच नहीं किया? :) – Troubadour

1

मुझे एक ही समस्या थी, और आखिरकार इसे काम किया।

मिल छवि ठीक से पढ़े जाने QUrlमें सही पथ देने के लिए, सुनिश्चित करें

जैसे: सी पर छवि फ़ाइल: /xxx/abc.png -> QUrlसी की तरह कुछ हो गया है:/xxx/yyy -> yyy छवि के साथ एक ही निर्देशिका पर होना चाहिए।

जबकि क्यूटी पर डिबगिंग अपने वर्तमान निर्देशिका निर्देशिका बनाने में है! डीबग/रिलीज डीआईआर पर नहीं ..

एक्सई पर, आपको क्यूडीआईआर :: वर्तमान() पर कॉल करके वास्तविक वर्तमान डीआईआर मिल जाता है।

संबंधित मुद्दे