2016-10-14 10 views
-2

私はListViewをcppから渡された値でバインドしています。Signal emit問題 - Listviewがフルリストを表示していません

問題:リストビューは1行だけを表示し、最初の値を意味します。残りの行は表示されません。

チェック: 私はテストとしてmain.qmlでのListModel/ListElementを作成し、リストビューと結合し、今、リストビューがうまく働いて、信号を発した後、私は疑うすべての値

を表示し、エラーが発生します。

コードスニペット:

main.qml

ListView { 
    id: idListView 
    anchors { 
     left: parent.left 
     leftMargin: 10 * scaleFactor 
     right: parent.right 
     rightMargin: 10 * scaleFactor 
     top: rectangleToolBar.bottom 
     topMargin: 10 * scaleFactor 
     bottom: rectangleStatusBar.top 
     bottomMargin: 10 * scaleFactor 
    } 
    // model: objHomeController.detailsModel // Display only one row 
    //model: idListmodel //Working fine 
    delegate: comsearchDelegate 
    spacing: 10 * scaleFactor 
    clip: true 

    highlight: Rectangle { 
     color: 'grey' 
     Text { 
      anchors.centerIn: parent 
      color: 'white' 
     } 
    } 
    focus: true 
} 


Component { 
    id: comsearchDelegate 
    Row { 
     spacing: 10 * scaleFactor 

     Column { 
      Layout.alignment: Qt.AlignTop 

      Text { text: title; font { pixelSize: 14 * scaleFactor; bold: true } } 
      Text { text: description; font { pixelSize: 14 * scaleFactor; bold: true } } 

     } 
    } 
} 

ListModel { 
    id: idListModel 
    ListElement{ 
     title : "sdfsdf"; 
     description:"sdfsdfs"; 

    } 
    ListElement { 
     title : "sdfsdf"; 
     description:"sdfsdfs"; 
    } 
    ListElement { 
     title : "sdfsdf"; 
     description:"sdfsdfs"; 
    } 
    ListElement { 
     title : "sdfsdf"; 
     description:"sdfsdfs"; 
    } 
} 

HomeController.h

Q_PROPERTY(Model* detailsModel READ get_detailsModel WRITE set_detailsModel NOTIFY detailsModelChanged) 

HomeController.cpp

void HomeController::set_detailsModel(Model* value) 
{ 
    m_detailsModel = value; 

    //value has correct values - checked. 
    emit detailsModelChanged(value); 
} 

Model* HomeController::get_detailsModel(void) 
{ 
    return m_detailsModel; 
} 

void HomeController::getAllData() 
{ 
    m_detailsModel->clear(); 
    m_detailsModel->updateModel(eveReadXML()); 
    set_detailsModel(m_detailsModel); 
} 

Model.cpp

void Model::updateModel(const QList<Details> & details) 
{ 
    if(this->rowCount() > 0) { 
     this->clear(); 
    } 

    beginInsertRows(QModelIndex(),rowCount(),rowCount()); 
    m_modelData.append(details); 
    endInsertRows(); 
} 

私は.NETのバックグラウンドから来たので、ListView/GridViewをDataTableまたはXMLにバインドすることを理解したいと思います。ここでは、Details [Details.h]という名前のCreatedクラスを作成し、Model.h/Model.cppを作成し、そこから値を取得してListViewにバインドしました。私は正しいことをしていますか、それとも他の流れがありますか?任意のチュートリアル/ Codesnippet /プロジェクトのリンクが高く評価されています。 C++からのListModelを定義するには

+0

シグナルと関係があるという結論にどのように到達しましたか? あなたの説明からわかるように、それはうまくいきます。そうでなければ、ビューは完全に空になります。 私の推測では、あなたのモデルが正しく動作していないと思います。実際にテストしましたか? –

+0

'get_detailsModel()'の定義を表示できますか? –

+0

親愛なるAnshさん、上記のコードをフローとして投稿しました。 –

答えて

0

、あなたはあなたがこのプロジェクトにQQmlObjectListModelに例を取ることができQAbstractListModel

https://doc.qt.io/qt-5/qabstractlistmodel.html

をサブクラス化する必要があります。http://gitlab.unique-conception.org/qt-qml-tricks/qt-qml-models

それともクローンを作成すると、次のようにあなたのプロジェクトでそれを使用:

Q_PROPERTY(QQmlObjectListModel<Details>* detailsModel READ get_detailsModel WRITE set_detailsModel NOTIFY detailsModelChanged) 
関連する問題