簡體   English   中英

QML-Listview(Cpp模型)詳細信息對話框

[英]QML-Listview (Cpp-Model) Details-Dialog

編輯:26.08.2014 08:20-完全重做的問題!

我想做的是:

  1. 使用來自cpp-listmodel(QAbstractListModel)的數據填充qml-listview。
  2. 通過單擊列表視圖項,打開一個對話框,以顯示來自cpp-listmodel的更多數據。

我有兩個cpp類:

  1. 具有兩個屬性的DataModelItem(listData(顯示在列表視圖中)和detailsData(顯示在對話框中))
  2. 繼承帶有屬性QList itemList的QAbstractListModel的DataModel。

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。

我發現,我不能在主應用程序中編寫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

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM