信号发出问题 - Listview未显示完整列表

时间:2016-10-14 15:54:11

标签: c++ listview qml

我使用从cpp传递的值绑定ListView。

问题:Listview只显示一行,表示第一个值,其余行没有出现。

经过: 我在main.qml中创建了一个ListModel / ListElement作为test并与ListView绑定,现在Listview工作正常,显示所有值

我怀疑在信号发出后,会发生错误。

代码段:

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。在这里,我按照Created类调用Details [Details.h]并创建Model.h / Model.cpp并从那里获取值并绑定到ListView。我做对了,还是我们还有其他的流程。任何教程/ Codesnippet /项目链接高度赞赏。

1 个答案:

答案 0 :(得分:0)

要从c ++定义ListModel,您需要继承QAbstractListModel

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

您可以在此项目中的QQmlObjectListModel上进行示例:http://gitlab.unique-conception.org/qt-qml-tricks/qt-qml-models

或者克隆它并在项目中使用它,如下所示:

Q_PROPERTY(QQmlObjectListModel<Details>* detailsModel READ get_detailsModel WRITE set_detailsModel NOTIFY detailsModelChanged)