BlinCT
BlinCTMay 19, 2016, 5:56 a.m.

Переключение между двумя обьектами класса

handlers, id, qml, signals

Всем привет.
Пытаюсь решить такую задачу, в main.qml есть 4 контента с которыми надо работать.

CircleTimerContent  //Заполнение данными из файла CircleTimerContent
{
    id:circletimercontent
    anchors.top: parent.top
    anchors.topMargin: dp(125)
    anchors.horizontalCenter: parent.horizontalCenter
    width: dp(130)
    height: dp(130)
}
 
CircleTimerContent  //Заполнение данными из файла CircleTimerContent
{
    id:circletimercontent2
    anchors.top: circletimercontent.bottom
    anchors.right: circletimercontent.left
    anchors.left: parent.left
 
    anchors.topMargin: dp(10)
    anchors.horizontalCenter: parent.horizontalCenter
}
 
ToolBarContent  //Заполнение данными из файла ToolBarContent
{
    id: toolbarcontent
    onChecked:
    {
        settimecontent.flag = check
        circletimercontent.flag = check
        circletimercontent2.flag = check
    }
}
 
SetTimeContent  //Заполнение данными из файла SetTimeContent
{
    id:settimecontent
    anchors.top: toolbarcontent.bottom
    anchors.topMargin: dp(5)
}

Первые 2 это объекты одного класса, работают одинаково. На третьем располагается переключатель который меняет режимы для выше описанных 2 объектов. На 4 находится объект на котором есть текстовая надпись и поле ввода.

Описание CircleTimerContent.qml

import QtQuick 2.0
import CircleTimer 1.0
 
CircleTimer
{
    id: circletimer
    property alias flag: circleTimerClicked.flag
 
    Text
    {
        id: texttimer
        anchors.centerIn: parent
        font.bold: true
        font.pixelSize: 15
    }
 
    onCircleTimeChanged:
    {
        texttimer.text = Qt.formatTime(circleTime, "hh:mm:ss")
    }
 
    MouseArea
    {
        id: circleTimerClicked
        anchors.fill: parent
        property bool flag: true
        onClicked:
        {
            if(circletimer.isClickedTimer(circleTimerClicked.width, circleTimerClicked.height, mouse.x, mouse.y))
            {
                if(circleTimerClicked.flag === false)
                {
                    console.log("bla bla")
                }
                else
                {
                    if (circletimer.isRunning())
                    {
                        circletimer.stop();
                    }
                    else
                    {
                        circletimer.start();
                    }
                }
            }
        }
    }
}

Здесь есть 2 режима, это если флаг один то мы может работать с таймерами а если другой то что то посылать во внешку.

Данные из SetTimerContent.qml

Item
{
    id: timerValue
    property alias flag: testtext.flag
    Label
    {
        id: labeltext
        text: "Timer: "
        width: 50
    }
    TextField
    {
        id:testtext
        inputMask: ("NN:NN")
        text: "00:00"
        anchors.left: labeltext.right
        width: 55
        property bool flag: true
        readOnly: flag
        Keys.onPressed:
        {
            console.log(event.key)
            if(event.key === Qt.Key_Enter ||  event.key === Qt.Key_Return)
            {
                circletimercontent.timerValue = testtext.text
                circletimercontent.testTimerValue = testtext.text
                circletimercontent.clear();
 
            }
        }
    }
}

Здесь на минимуме что я пытаюсь сделать так это при нажатии на один из объектов CircleTimerContent послать в поле labletext.text (так мне кажется возможно реализовать) id выбранного объекта. То есть в label будет содержатся название или circletimercontent или circletimercontent2. Этим мы будем определять что было выбрано.
На максимуме я хочу чтобы при выборе одного из объектов из поля testtext.text уже заданные данные посылались именно в выбранный объект CircleTimerContent.
Я думаю что если пойму как решить минимальную задачу с надписью то второе уже будет близким по решению и решить смогу сам. Но вот примерно как с надписью при выборе очень плохо понятно(

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

1
Evgenii Legotckoi
  • May 20, 2016, 9:29 a.m.
  • The answer was marked as a solution.

Вот небольшой пример на эту тему, чтобы можно было выбирать какой-то целевой объект с помощью идентификаторов. В этом случае также необходимо использовать сигналы и обработчики сигналов. Ну а в CircleTimer объектах можно сделать также property alias для свойств text. Вместо них в примере даны Rectangle.

main.qml

import QtQuick 2.6
import QtQuick.Controls 1.5
 
ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
 
    SetTimerContent  //Заполнение данными из файла SetTimeContent
    {
        id:settimercontent
        height: 50
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.topMargin: 10
        anchors.leftMargin: 10
        anchors.rightMargin: 10
 
        onSetTextToTarget: {
            switch(targetId)
            {
            case 1:
                text1.text = text
                break;
            case 2:
                text2.text = text
                break;
            }
        }
    }
 
    Rectangle {
        id: firstRectangle
        height: 50
        color: "blue"
        anchors {
            top: settimercontent.bottom
            left: parent.left
            right: parent.right
            topMargin: 10
            leftMargin: 10
            rightMargin: 10
        }
 
        Text {
            id: text1
            anchors.centerIn: parent
        }
 
        MouseArea {
            anchors.fill: parent
            onClicked: {
                settimercontent.targetId = 1
            }
        }
    }
 
    Rectangle {
        id: secondRectangle
        height: 50
        color: "red"
        anchors {
            top: firstRectangle.bottom
            left: parent.left
            right: parent.right
            topMargin: 10
            leftMargin: 10
            rightMargin: 10
        }
 
        Text {
            id:text2
            anchors.centerIn: parent
        }
 
        MouseArea {
            anchors.fill: parent
            onClicked: {
                settimercontent.targetId = 2
            }
        }
    }
}

SetTimerContent.qml

import QtQuick 2.5
import QtQuick.Controls 1.4
 
Item
{
    id: timerValue
    property alias flag: testtext.flag
    property alias targetId: testtext.targetId
 
    signal setTextToTarget(var text, var targetId)
 
    Label
    {
        id: labeltext
        text: "Timer: "
        width: 50
    }
    TextField
    {
        id:testtext
        inputMask: ("NN:NN")
        text: "00:00"
        anchors.left: labeltext.right
        width: 55
        property bool flag: false
        property int targetId: 1
        readOnly: flag
        Keys.onPressed:
        {
            console.log(event.key)
            if(event.key === Qt.Key_Enter ||  event.key === Qt.Key_Return)
            {
                setTextToTarget(testtext.text, testtext.targetId)
            }
        }
    }
}

 

    Comments

    Only authorized users can post comments.
    Please, Log in or Sign up
    AD

    C ++ - Test 004. Pointers, Arrays and Loops

    • Result:50points,
    • Rating points-4
    m

    C ++ - Test 004. Pointers, Arrays and Loops

    • Result:80points,
    • Rating points4
    m

    C ++ - Test 004. Pointers, Arrays and Loops

    • Result:20points,
    • Rating points-10
    Last comments
    i
    innorwallNov. 12, 2024, 6:12 a.m.
    Django - Tutorial 055. How to write auto populate field functionality Freckles because of several brand names retin a, atralin buy generic priligy
    i
    innorwallNov. 12, 2024, 2:23 a.m.
    QML - Tutorial 035. Using enumerations in QML without C ++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
    i
    innorwallNov. 11, 2024, 11:50 p.m.
    Qt/C++ - Lesson 052. Customization Qt Audio player in the style of AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
    i
    innorwallNov. 11, 2024, 10:19 p.m.
    Heap sorting algorithm The role of raloxifene in preventing breast cancer priligy precio
    i
    innorwallNov. 11, 2024, 9:55 p.m.
    PyQt5 - Lesson 006. Work with QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
    Now discuss on the forum
    i
    innorwallNov. 12, 2024, 4:56 a.m.
    добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
    i
    innorwallNov. 11, 2024, 6:55 p.m.
    Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
    9
    9AnonimOct. 25, 2024, 4:10 p.m.
    Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

    Follow us in social networks