QML-Listview (Cpp-Model) Подробности-Диалог

РЕДАКТИРОВАТЬ: 26.08.2014 08:20 — полностью переработанный вопрос!

Что я хочу сделать, это:

  1. Заполните qml-listview данными из cpp-listmodel (QAbstractListModel).
  2. Откройте диалоговое окно, в котором отображаются дополнительные данные из модели cpp-list, щелкнув элемент списка.

У меня есть два cpp-класса:

  1. DataModelItem с двумя атрибутами (listData (отображается в виде списка) и detailsData (отображается в диалоге))
  2. DataModel, которая наследует QAbstractListModel с атрибутом QList itemList.

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();
}

Теперь я хочу отобразить listData в ListView. Когда я нажимаю на один ListItem, должно появиться диалоговое окно с detailsData.

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

}
}
0

Другие решения


По вопросам рекламы [email protected]