QML-Listview(Cpp-Model)详细信息 - 对话框

时间:2014-08-25 06:20:12

标签: c++ listview qml datamodel

编辑:26.08.2014 08:20 - 完全重写的问题!

我想做的是:

  1. 使用cpp-listmodel(QAbstractListModel)中的数据填充qml-listview。
  2. 打开一个对话框,通过点击listview-item显示来自cpp-listmodel的更多数据。
  3. 我有两个cpp-Classes:

    1. 具有两个属性的DataModelItem(listData(显示在listview中)和detailsData(显示在Dialog中))
    2. DataModel,它使用attribut QList itemList继承QAbstractListModel。
    3. DataModel.cpp:

      QVariant DataModel::data(const QModelIndex &index, int role) const
      {
          DataModelItem *item = m_itemList.at(index.row());
          switch (role) {
          case ListDataRole:
              return QString().sprintf("%.2f", item->listData());
              break;
          case DetailsDataRole:
              return QString().sprintf("%.4f", item->detailsData());
              break;
          default:
              qDebug () << "role not handled";
          }
      
          return QVariant();
      }
      

      我现在要做的是,在ListView中显示listData。当我单击一个ListItem时,会出现一个带有detailsData的对话框。

1 个答案:

答案 0 :(得分:0)

我想通了,我不能在我的主应用程序中编写model.detailsData,但只是detailsData有效(我也尝试过listview.model.detailsData没有效果)。可能有人知道为什么这不起作用。

无论如何我找到了解决方案。

以下是工作示例:

<强> main.qml

import QtQuick 1.1

Rectangle {
    width: 200
    height: 400

    ListView {
        id: listView

        model: dataModel
        delegate: listDelegate
    }

    Component {
        id: listDelegate

        Item {
            id: delegateItem
            width: listDataText.width
            height: listDataText.height
            Text {
                id: listDataText
                text: listData
            }

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    console.log(detailsData)
                    itemDetails.details = model.detailsData
                    itemDetails.visible = true
                }
            }
        }
    }

    DetailsDialog {
        id: itemDetails
        visible: false
        anchors.centerIn: parent
    }
}

<强> DetailsDialog.qml

import QtQuick 1.1

Rectangle {
    property alias details: detailsText.text
    width: 100
    height: 62

    Text {
        id: detailsText

    }
}