Russian Qt Forum
Ноябрь 25, 2024, 04:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменение компонента  (Прочитано 2526 раз)
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";
                }
но в нашем
случае это не проходит. Во всяком случае у меня. Как быть?
« Последнее редактирование: Июль 23, 2012, 00:54 от Nerfair » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Июль 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).
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Nerfair
Гость
« Ответ #2 : Июль 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);
                }
             }
         }
     }
Записан
Nerfair
Гость
« Ответ #3 : Июль 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
« Последнее редактирование: Июль 27, 2012, 08:10 от Nerfair » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.217 секунд. Запросов: 22.