2012-10-16 50 views
0

我試圖讓從互聯網上的圖像列表中QML列表視圖展現出來。我有一些代碼,看起來像這樣:我要如何在黑莓瀑布,QML和C++列表視圖網頁視圖,QT

ListView { 

    objectName: "imageListView" 

    listItemComponents: [ 

     ListItemComponent { 

      type: "item" 

      Container { 
       WebView { 
        url: ListItemData.imageSource 
       }  
      }       
     } 
    ] 
} 

問題是,這只是導致以下錯誤:「無法將[未定義]到QUrl網址」

我知道ListItemData.imageSource包含正確的數據,因爲我使用Label {text:ListItemData.imageSource}來替代WebView來測試它,並且它顯示了所需的所有圖像URL。

回答

0

好的 - 所以我找到了另一種解決方案。我從Beta 2 SDK升級到Beta 3 SDK。然後,我只是做了這樣的事情:

#include <QObject> 
#include <bb/cascades/Image> 

class MyImageClass : public QObject, public bb::cascades::Image 
{ 
    Q_OBJECT 

    Q_PROPERTY(bb::cascades::Image image READ image WRITE setImage NOTIFY imageChanged FINAL) 

    //... 
    bb::cascades::Image image_; 
public: 
    //... 
    bb::cascades::Image image() const {return image_;} 

    void setImage(bb::cascades::Image image { 
     image_ = image; 
     emit imageChanged(); 
    } 

signals: 
    //... 
    void imageSourceChanged(); 
} 

然後插入一張圖片到列表時,我只是用:

groupDataModel_.insert(myImageObject); 

,並在我的QML我:

ListView { 
    id: imageListView 
objectName: "ImageListView"   

    listItemComponents: [ 
    ListItemComponent { 
     type: "item" 

     Container { 
      id: imagesRoot 
      objectName: "ImagesRoot" 

       ImageView { 
       image: ListItemData.image 
      } 
     } 
    } 
    ] 
} 
2

我建議你只使用ImageView,即使你從網上加載圖像。

首先,使用QNetworkRequest,QNetworkAccessManager和QNetworkReply類&獲取QByteArray在ImageView中的回覆加載的網絡請求。

QNetworkAccessManager* netManager = new QNetworkAccessManager(); 
if (netManager) { 

QUrl url(ImageUrl); 
QNetworkRequest networkRequest(url); 
QNetworkReply* networkReply = netManager->get(networkRequest); 
connect(networkReply, SIGNAL(finished()), this, SLOT(onReply())); 
} 

在onReply()槽可以加載圖像這樣&:

void App::onReply(QNetworkReply* reply) { 
if (reply->error() != QNetworkReply::NoError) { 
    qDebug() << "Image not available or any error"; 
    return; 
} 

Image image = Image(reply->readAll()); 
imageView->setImage(image); 

} 

請注意,如果圖像過大,您可能需要的ImageData類&其方法加載圖像級聯ImageView。它不會通過使用setImage方法直接加載圖像。 &爲了使這項工作與ListView,你必須創建自己的CustomItem & ListItemProvider &也必須覆蓋更新項目的方法。希望這可以幫助。

+0

三江源,但似乎ListItemProvider從級聯文件夾中缺少,現在我試圖找到我可以從互聯網上下載那個缺失的類的地方,如果任何人都可以指出我在正確的方向,那將非常感謝,謝謝。 – user1296259

+0

那麼你必須擴展ListItemProvider類和創造,在C++ –

+0

是,三江源,我理解你自己定製的供應商,但是當我嘗試包括ListItemProvider用的#include ,然後滾動在那#包括我的鼠標聲明,它說,「未解決的包含」,它以黃色下劃線,當我嘗試編譯時,有一條錯誤消息說該ListItemProvider文件不存在。 – user1296259

相關問題