2011-05-31 79 views
1

我怎樣才能改變與C++代碼PathView的模式? 我的對象名添加到我的pathView找到它,然後我改變這樣的屬性,但是當我這樣做,我的列表是空的:QT QML進口的ListModel從C++到QML

QDeclarativeItem *listSynergie = myClass.itemMain->findChild<QDeclarativeItem*> ("PathViewInscription"); 
listSynergie->setProperty("model", QVariant::fromValue(dataList)); 

我的數據列表是填補這樣的:

QList<QObject*> dataList; 
dataList.append(new synergieListObject("Item 1", "1",false)); 
dataList.append(new synergieListObject("Item 2", "2",true)); 
dataList.append(new synergieListObject("Item 3", "3",false)); 
dataList.append(new synergieListObject("Item 4", "4",false)); 

這是我PathView的代碼:

PathView { 
    objectName: "PathViewInscription" 
    Keys.onRightPressed: if (!moving) { incrementCurrentIndex(); console.log(moving) } 
    Keys.onLeftPressed: if (!moving) decrementCurrentIndex() 
    id: view 
    anchors.fill: parent 
    highlight: Image { source: "../spinner_selecter.png"; width: view.width; height: itemHeight+4; opacity:0.3} 
    preferredHighlightBegin: 0.5 
    preferredHighlightEnd: 0.5 
    focus: true 
    model: appModel 
    delegate: appDelegate 

    dragMargin: view.width/2 
    pathItemCount: height/itemHeight 
    path: Path { 
     startX: view.width/2; startY: -itemHeight/2 
     PathLine { x: view.width/2; y: view.pathItemCount*itemHeight + itemHeight } 
    } 
} 

和ListModel的的代碼:

ListModel { 
    id: appModel 
    ListElement { label: "syn1"; value: "1"; selected:false} 
    ListElement { label: "syn2"; value: "2" ; selected:false} 
    ListElement { label: "syn3"; value: "3" ; selected:false} 
} 

有什麼不對? 謝謝!

編輯:

所述的appDelegate的代碼:

Component { 
    id: appDelegate 
    Item { 
     width: 100; height: 100 

     Text { 
      anchors { horizontalCenter: parent.horizontalCenter } 
      text: label 
      smooth: true 
     } 

     MouseArea { 
      anchors.fill: parent 
      onClicked: view.currentIndex = index 
     } 
    } 
} 

我的對象的代碼:

#ifndef SYNERGIELISTOBJECT_H 
#define SYNERGIELISTOBJECT_H 
#include <QObject> 

class synergieListObject : public QObject 
{ 
    Q_OBJECT 

    Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY labelChanged) 
    Q_PROPERTY(QString value READ value WRITE setValue NOTIFY valueChanged) 
    Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectedChanged) 

public: 
    synergieListObject(QObject *parent=0); 
    synergieListObject(const QString &label,const QString &value,bool selected, QObject *parent=0); 

    QString label() const; 
    void setLabel(const QString &label); 

    QString value() const; 
    void setValue(const QString &value); 

    bool selected() const; 
    void setSelected(const bool &selected); 

signals: 
    void labelChanged(); 
    void valueChanged(); 
    void selectedChanged(); 

private: 
    QString m_label; 
    QString m_value; 
    bool m_selected; 
}; 

#endif // SYNERGIELISTOBJECT_H 

C++我的對象:

#include "synergielistobject.h" 


synergieListObject::synergieListObject(QObject *parent): QObject(parent) 
{ 
} 

synergieListObject::synergieListObject(const QString &label,const QString &value,bool selected, QObject *parent): QObject(parent), m_label(label), m_value(value), m_selected(selected) 
{ 
} 

QString synergieListObject::label() const 
{ 
    return m_label; 
} 

void synergieListObject::setLabel(const QString &label) 
{ 
    if (label != m_label) { 
     m_label = label; 
     emit labelChanged(); 
    } 
} 


QString synergieListObject::value() const 
{ 
    return m_value; 
} 

void synergieListObject::setValue(const QString &value) 
{ 
    if (value != m_value) { 
     m_value = value; 
     emit valueChanged(); 
    } 
} 


bool synergieListObject::selected() const 
{ 
    return m_selected; 
} 

void synergieListObject::setSelected(const bool &selected) 
{ 
    if (selected != m_selected) { 
     m_selected = selected; 
     emit selectedChanged(); 
    } 
} 
+0

你必須張貼在SynergieListObject的「數據」功能和的appDelegate源。 – Abhijith 2011-05-31 12:56:50

+0

我加了,謝謝 – NicoMinsk 2011-05-31 14:14:29

+0

我從來沒有用過QdeclarativeItem在QML中設置模型。試試這個,而不是'QDeclarativeContext * ctxt = view.rootContext(); ctxt-> setContextProperty( 「模型」,的QVariant :: fromValue(DataList控件));' – Abhijith 2011-05-31 15:22:09

回答

3

我從來沒有用QdeclarativeItem在QML中設置模型。試試這個代替

QDeclarativeContext *ctxt = view.rootContext(); ctxt->setContextProperty("model", QVariant::fromValue(dataList)); 

聲明模型作爲根的屬性。這樣你可以設置model.Or添加一個函數,它將模型作爲參數併爲視圖設置模型。然後你可以從C++中調用這個函數。