2015-10-09 54 views
1

我看到列表,它有正確數量的行(根據QStringList中的元素數量),但行是空的。QML中的ListView - 空行

我在做什麼錯了?

在C++中我的代碼是:

QStringList s; 
s.append("1"); 
s.append("2"); 
s.append("2"); 
s.append("2"); 
s.append("2"); 
s.append("2"); 


QObject * pList = pQmlObject->findChild<QObject*>("devicesList"); 
pList->setProperty("model",s); 

和QML我做的:

ListView { 
      id:devicesList 
      objectName:"devicesList" 
      width: 100; height: 100 
      model: myModel 
      delegate: Rectangle { 
       height: 50 

       width: 100 

      } 
     } 

非常感謝您的幫助!

+0

AFAIK代表必須是*項目*或*組件* – danielfranca

+3

@danielfranca'Rectangle'是一個'Item' – GrecKo

回答

3

您需要設置該文本ListView。你的情況:

ListView { 
      id:devicesList 
      objectName:"devicesList" 
      width: 100; height: 100 
      model: myModel 
      delegate: Rectangle { 
       height: 50 
       width: 100 
       Text { text: modelData } 
      } 
     } 

按照documentation

模型可以是一個簡單的QStringList中,它通過modelData角色提供的 列表中的內容。

編輯#1:

我得到警告ReferenceError: myModel is not defined當我與你的C++代碼的工作。

也許是我的錯,因爲我沒有整個代碼,但在這裏的任何情況下,你有不同的方式與QML交互的對象:

#include <QGuiApplication> 
#include <QStringList> 

#include <qqmlengine.h> 
#include <qqmlcontext.h> 
#include <qqml.h> 
#include <QtQuick/qquickitem.h> 
#include <QtQuick/qquickview.h> 

int main(int argc, char ** argv) 
{ 
    QGuiApplication app(argc, argv); 

    QStringList s; 
    s.append("1"); 
    s.append("2"); 
    s.append("2"); 
    s.append("2"); 
    s.append("2"); 
    s.append("3"); 

    QQuickView view; 

    QQmlContext *ctxt = view.rootContext(); 
    ctxt->setContextProperty("myModel", QVariant::fromValue(s)); 

    view.setSource(QUrl("qrc:view.qml")); 
    view.show(); 

    return app.exec(); 
} 
+0

是的,你需要'model'屬性,但是你有不同的方法來更新'ListView.'。我的代碼避免了警告,但是你肯定會找到你自己的解決方案。快樂的編碼! – Tarod