сетка MouseArea в Qt QML - PullRequest
       7

сетка MouseArea в Qt QML

0 голосов
/ 22 сентября 2011

Я создал элемент в QT QML, который содержит элемент MouseArea.

Вот код,

import QtQuick 1.0
Rectangle {
id: base
width: 240
height: 320
x:0; y:0
color: "#323138"
/////////////////////// MAIN FOCUSSCOPE //////////////////////
FocusScope {
    id: mainfocus
    height: base.height; width: base.width
    focus: true
    /////////////////////// MAIN GRID ///////////////////////////
    GridView {
        id: maingrid
        width: base.width-10; height: base.height-titlebar.height-10
        x: 5; y: titlebar.height+5;
        cellHeight: maingrid.height/3; cellWidth: maingrid.width/3-1
        Component {
            id: myicon
            Rectangle {
                id: wrapper
                height: maingrid.cellHeight-10; width: maingrid.cellWidth-10
                radius: 8; smooth: true
                color: GridView.isCurrentItem ? "#c0d0c0" : "transparent"
                focus: true
                MouseArea {
                    id: clickable
                    anchors.fill: wrapper
                    hoverEnabled: true
                    //onClicked: func()
                }
                Image {
                    id: iconpic
                    source: "./ui6.svg"
                    anchors.centerIn: wrapper
                }
                Text {
                    id: iconname
                    color: wrapper.GridView.isCurrentItem ? "black" : "#c8dbc8"
                    anchors.top: iconpic.bottom; anchors.horizontalCenter: iconpic.horizontalCenter
                    text:  name
                }
            }
        }
        model: 4
        delegate: myicon
        focus:  true
    }
}
//////////////////////// TITLEBAR ///////////////////////
Rectangle {
    id: titlebar
    x:base.x
    y:base.y
    height: 25; width: base.width
    color : "#356f47"
    Text {
        color: "#fdfdfd"
        anchors.centerIn: titlebar
        text: "title"
    }
}
}

Я хочу создать сетку из таких Предметов, чтобы она давала мне сетку из созданных мной пользовательских элементов, которые можно создавать по клику, которые я могу использовать для различных функций.

Используя элемент GridView, я смог создать такую ​​сетку, в которой в качестве шаблона использовалось количество моих пользовательских элементов.

Проблема в том, что когда я щелкаю по любому из этих элементов, он выполняет одну функцию, поскольку в моем элементе был только один элемент MouseArea. Я могу обнаружить щелчок по элементу, но не могу однозначно определить, по какому элементу был выполнен щелчок. Как мне этого добиться?

Конечно, я могу ошибаться, поэтому приветствуются и другие предложения. Спасибо

1 Ответ

2 голосов
/ 01 марта 2012

Когда элемент GridView создает экземпляры, они наследуют переменную индекса. Это идентифицирует уникальный предмет.

MouseArea {
    id: clickable
    anchors.fill: wrapper
    hoverEnabled: true
    onClicked: {
        maingrid.currentIndex=index;

        switch (index)
        {
        case 0:
            //Function or method to call when clicked on first item
            break;
        case 1:
            //Function or method to call when clicked on second item
            break;
        default:
            //Function or method to call when clicked on another item
            break;
        }
    }
}

Надеюсь, это вам поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...