Название: Изменение компонента
Отправлено: Nerfair от Июль 23, 2012, 00:52
Доброе время суток, опять я. Загружаю вопросы из массива в ListView import QtQuick 1.0
Column { width: parent.width height: parent.height
anchors.fill: parent anchors.topMargin: mainHeader.height;
function initQuestion(question, answers) { textQuestion.text = question
answersModel.clear(); for (var i = 0; i < answers.length; i++) answersModel.append({'id': answers[i]["id"] , 'answer': answers[i]["text"]}); }
TVHeader { width: parent.width imageSource: "qrc:/files/images/" + main.windowParam + "/header.game.on.png"; }
Item { height: main.fontSize width: parent.width
Text { anchors.centerIn: parent; font.pixelSize: main.fontSize + 8 font.bold: Font.Bold; text: "Вопрос 1/9000" } }
Rectangle { width: parent.width height: main.windowParam / 3 color: "transparent"
Image { anchors.centerIn: parent; source: "qrc:/files/images/" + main.windowParam + "/question.bar.png"; }
Text { id: textQuestion anchors.fill: parent anchors.topMargin: main.windowParam / 36 anchors.leftMargin: main.windowParam / 15 anchors.rightMargin: main.windowParam / 15 text: "" font.pixelSize: main.fontSize + 2 wrapMode: Text.WordWrap color: "#FFF" } }
ListModel { id: answersModel }
Component { id: answerDelegate Item { width: parent.width; height: main.windowParam / 7
Image { id: answerImage source: "qrc:/files/images/" + main.windowParam + "/answer.bar.purple.png"; }
Text { text: answer; font.pixelSize: main.fontSize; }
MouseArea { anchors.fill: parent onClicked: { answersView.currentIndex = index console.log("id Вопроса: " + index); } } } }
ListView { id: answersView width: parent.width height: (main.windowParam / 7)*(answersModel.count+1)
model: answersModel delegate: answerDelegate highlightFollowsCurrentItem: false //highlight: "" } }
И хочу что бы при выборе вопроса, тоесть onClicked/onPressed , менялась картинка с "answer.bar.purple.png" на "answer.bar.orange.png". В случае с простой картинкой, тоесть не в ListView как у нас тут, я бы прописал id и менял бы через id.source, onPressed: { id.source = "qrc:/files/images/" + main.windowParam + "/answer.bar.orange.png"; } но в нашем случае это не проходит. Во всяком случае у меня. Как быть?
Название: Re: Изменение компонента
Отправлено: kibsoft от Июль 23, 2012, 01:40
Не до конца понял, что именно вам надо..но, во-первых, answer - этот ответ, а не вопрос :) И во-вторых, если вы хотите, чтобы при нажатии просто менялась картинка(т.е. смена нажатого и не нажатого состояний), то можно сделать так: Image { id: answerImage source: "qrc:/files/images/" + main.windowParam + mouseArea.containsMouse ? "answer.bar.orange.png" : "/answer.bar.purple.png"; }
Не забудьте дописать id для MouseArea (id будет mouseArea).
Название: Re: Изменение компонента
Отправлено: Nerfair от Июль 23, 2012, 12:31
Не до конца понял, что именно вам надо..но, во-первых, answer - этот ответ, а не вопрос :) И во-вторых, если вы хотите, чтобы при нажатии просто менялась картинка(т.е. смена нажатого и не нажатого состояний), то можно сделать так: Image { id: answerImage source: "qrc:/files/images/" + main.windowParam + mouseArea.containsMouse ? "answer.bar.orange.png" : "/answer.bar.purple.png"; }
Не забудьте дописать id для MouseArea (id будет mouseArea). Спасибо, слегка дописал и вот что вышло (рабочее) Component { id: answerDelegate Item { width: parent.width; height: main.windowParam / 7
Image { id: answerImage source: "qrc:/files/images/" + main.windowParam + (answerMouseArea.pressed ? "/answer.bar.orange.png" : "/answer.bar.purple.png"); }
Text { text: answer; font.pixelSize: main.fontSize; }
MouseArea { id: answerMouseArea anchors.fill: parent onClicked: { answersView.currentIndex = index console.log(index); } } } }
Название: Re: Изменение компонента
Отправлено: Nerfair от Июль 26, 2012, 20:19
Добрый день, возникли новые вопросы с ListView с которыми я пока не смог сам разобраться. Конкретно как обратиться по id к какому либо компоненту? Допустим где id = 0 меняемся image на answer.bar.red.png ? В общем случае это не сложно "id".source = ""; а как быть с listview? Или другой пример, JS функцией изменить текст у элемента с id 0 на "example";Нашел! modelId.setProperty(); -- Так же интересует вопрос, нашел как менять фон у активного элемента states: [ State { name: "selected" when: (index==testInt) PropertyChanges {target: answerImage; source: "qrc:/files/images/" + main.windowParam + "/answer.bar.purple.png";} } ] Но при загрузке следующих элементов из массива, состояние "selected" так и остается по адрессу выбранного до этого элемента, как его обнулить?К черту, не актуально, обошел этот вопрос. -- И еще один вопрос, возможно ли отключить слайд эффект? Что бы пункты listview не двигались, вобще никак. :)interactive: false
|