April 4, 2019, 10:44 a.m.

Как в QML изменить текст лэйбла

QML, Label, text

Добрый день. Как в QML изменить текст лэйбла? В файле Page1Form.ui.qml прописан лэйбл

    Label {
        id: page1Label2
        x: 122
        y: 409
        width: 156
        height: 56
        text: qsTr("1 из 20")
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20
    }

В файле Page1.qml пытаюсь изменить текст лэйбла:

    page1Button0.onClicked: //left button
    {     
        page1Label2.text = "text"   
    }

Но это не работает, компилятор говорит что page1Button0 не определен.

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.
17

a page1Button0 существует? так уж сложилось, что при работе с QML нужно регулярно запускать qmake и пересобирать проект

0

page1Button0 существует. запуск qmake не помог

0

без полного кода страниц тяжело сказать, кроме очевидного что компилятор не видит кнопку.

п.с. по моему опыту, мне проще работать без Form, просто Page.qml, ее и в дизайнере можно открыть и так все необходимое на одной странице. как-то с формами не подружился

0

Компилятор видит кнопку, но не видит лэйбел Вот код Page1Form.ui.qml

import QtQuick 2.4
import QtQuick.Controls 2.4

Item {
    id: element
    width: 400
    height: 600
    property alias page1Button1: page1Button1
    property alias page1Button0: page1Button0
    property alias page1ButtonMenu: page1ButtonMenu

    Button {
        id: page1Button0
        x: 66
        y: 172
        width: 128
        height: 128
        //font.capitalization: Font.AllUppercase
        //display: AbstractButton.TextOnly
        //topPadding: 5
        Image {
            id: image
            width: 130
            height: 130
            anchors.topMargin: 0
            anchors.leftMargin: 0
            anchors.rightMargin: 0
            anchors.bottomMargin: 0
            anchors.fill: parent
            source: "qrc:/images/images/close.png"
            fillMode: Image.Stretch
        }
    }

    Button {
        id: page1Button1
        x: 251
        y: 172
        width: 130
        height: 130
        Image {
            id: image1
            width: 130
            height: 130
            anchors.rightMargin: 0
            anchors.bottomMargin: 0
            anchors.fill: parent
            source: "qrc:/images/images/close.png"
            fillMode: Image.Stretch
        }
    }

    Button {
        id: page1ButtonMenu
        x: 150
        y: 479
        text: qsTr("МЕНЮ")
        font.pointSize: 18
    }

    Label {
        id: page1labe0
        x: 57
        y: 47
        width: 286
        height: 33
        text: qsTr("Выберете красный цвет")
        horizontalAlignment: Text.AlignHCenter
        font.pixelSize: 22
        font.family: "Verdana"
        font.weight: Font.Thin
    }

    Label {
        id: page1Label1
        x: 122
        y: 340
        width: 156
        height: 56
        text: qsTr("Побед: 0%")
        font.pointSize: 20
        horizontalAlignment: Text.AlignHCenter
    }

    Label {
        id: page1Label2
        x: 122
        y: 409
        width: 156
        height: 56
        text: qsTr("1 из 20")
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20
    }
    states: [
        State {
            name: "Page1State1"

            PropertyChanges {
                target: image
                source: "qrc:/images/images/red.png"
            }

            PropertyChanges {
                target: image1
                source: "qrc:/images/images/black.png"
            }
        },
        State {
            name: "Page1State2"

            PropertyChanges {
                target: image
                source: "qrc:/images/images/black.png"
            }

            PropertyChanges {
                target: image1
                source: "qrc:/images/images/red.png"
            }
        },
        State {
            name: "Page1State0"
        }
    ]
}

вызвать пытаюсь в Page1.qml

import QtQuick 2.4
import QtQml 2.12

Page1Form {

    page1Button0.onClicked: //left button
    {  
        page1Label2.text = "weg"
    }

    page1Button1.onClicked: //rigth button
    {
        state = "Page1State1"
    }

    page1ButtonMenu.onClicked:
    {
        loader.source = "Page0.qml"
    }

}

0

добавил в форму property alias page1Label2: page1Label2 и все заработало. ну или обработку клик делать на форме, тоже работать будет

а вот если бы было все в одном файле, то можно обойтись без алиасов

1

Странно, но у меня все еще не работае. Покажите пожалуйста ваш вариант. Сделал так:

    Label {
        id: page1Label2
        x: 122
        y: 409
        width: 156
        height: 56
        text: qsTr("1 из 20")
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20
        property alias page1Label2: page1Label2
    }
0

Сделал так, заработало. Спасибо!

0

работать будет как так

import QtQuick 2.4
import QtQml 2.12

Page1Form {

   page1Button0.onClicked: //left button
    {
        page1Label2.text = "weg"
    }
    page1Button1.onClicked: //rigth button
    {
        state = "Page1State1"
    }

    page1ButtonMenu.onClicked:
    {
        loader.source = "Page0.qml"
    }

}

import QtQuick 2.4
import QtQuick.Controls 2.4


Item {
    id: element
    width: 400
    height: 600
    property alias page1Button1: page1Button1
    property alias page1Button0: page1Button0
    property alias page1ButtonMenu: page1ButtonMenu
    property alias page1Label2: page1Label2

    Button {
        id: page1Button0
        x: 66
        y: 172
        width: 128
        height: 128

        Image {
            id: image
            width: 130
            height: 130
            anchors.topMargin: 0
            anchors.leftMargin: 0
            anchors.rightMargin: 0
            anchors.bottomMargin: 0
            anchors.fill: parent
            source: "qrc:/images/images/close.png"
            fillMode: Image.Stretch
        }


    }

    Button {
        id: page1Button1
        x: 251
        y: 172
        width: 130
        height: 130
        Image {
            id: image1
            width: 130
            height: 130
            anchors.rightMargin: 0
            anchors.bottomMargin: 0
            anchors.fill: parent
            source: "qrc:/images/images/close.png"
            fillMode: Image.Stretch
        }
    }

    Button {
        id: page1ButtonMenu
        x: 150
        y: 479
        text: qsTr("МЕНЮ")
        font.pointSize: 18
    }

    Label {
        id: page1labe0
        x: 57
        y: 47
        width: 286
        height: 33
        text: qsTr("Выберете красный цвет")
        horizontalAlignment: Text.AlignHCenter
        font.pixelSize: 22
        font.family: "Verdana"
        font.weight: Font.Thin
    }

    Label {
        id: page1Label1
        x: 122
        y: 340
        width: 156
        height: 56
        text: qsTr("Побед: 0%")
        font.pointSize: 20
        horizontalAlignment: Text.AlignHCenter
    }

    Label {
        id: page1Label2
        x: 122
        y: 409
        width: 156
        height: 56
        text: qsTr("1 из 20")
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20
    }
    states: [
        State {
            name: "Page1State1"

            PropertyChanges {
                target: image
                source: "qrc:/images/images/red.png"
            }

            PropertyChanges {
                target: image1
                source: "qrc:/images/images/black.png"
            }
        },
        State {
            name: "Page1State2"

            PropertyChanges {
                target: image
                source: "qrc:/images/images/black.png"
            }

            PropertyChanges {
                target: image1
                source: "qrc:/images/images/red.png"
            }
        },
        State {
            name: "Page1State0"
        }
    ]
}

так и так

import QtQuick 2.4
import QtQml 2.12

Page1Form {

    page1Button1.onClicked: //rigth button
    {
        state = "Page1State1"
    }

    page1ButtonMenu.onClicked:
    {
        loader.source = "Page0.qml"
    }

}

import QtQuick 2.4
import QtQuick.Controls 2.4


Item {
    id: element
    width: 400
    height: 600
    property alias page1Button1: page1Button1
    property alias page1Button0: page1Button0
    property alias page1ButtonMenu: page1ButtonMenu
   // property alias page1Label2: page1Label2

    Button {
        id: page1Button0
        x: 66
        y: 172
        width: 128
        height: 128

        Image {
            id: image
            width: 130
            height: 130
            anchors.topMargin: 0
            anchors.leftMargin: 0
            anchors.rightMargin: 0
            anchors.bottomMargin: 0
            anchors.fill: parent
            source: "qrc:/images/images/close.png"
            fillMode: Image.Stretch
        }
        onClicked: page1Label2.text = "weg"


    }

    Button {
        id: page1Button1
        x: 251
        y: 172
        width: 130
        height: 130
        Image {
            id: image1
            width: 130
            height: 130
            anchors.rightMargin: 0
            anchors.bottomMargin: 0
            anchors.fill: parent
            source: "qrc:/images/images/close.png"
            fillMode: Image.Stretch
        }
    }

    Button {
        id: page1ButtonMenu
        x: 150
        y: 479
        text: qsTr("МЕНЮ")
        font.pointSize: 18
    }

    Label {
        id: page1labe0
        x: 57
        y: 47
        width: 286
        height: 33
        text: qsTr("Выберете красный цвет")
        horizontalAlignment: Text.AlignHCenter
        font.pixelSize: 22
        font.family: "Verdana"
        font.weight: Font.Thin
    }

    Label {
        id: page1Label1
        x: 122
        y: 340
        width: 156
        height: 56
        text: qsTr("Побед: 0%")
        font.pointSize: 20
        horizontalAlignment: Text.AlignHCenter
    }

    Label {
        id: page1Label2
        x: 122
        y: 409
        width: 156
        height: 56
        text: qsTr("1 из 20")
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20
    }
    states: [
        State {
            name: "Page1State1"

            PropertyChanges {
                target: image
                source: "qrc:/images/images/red.png"
            }

            PropertyChanges {
                target: image1
                source: "qrc:/images/images/black.png"
            }
        },
        State {
            name: "Page1State2"

            PropertyChanges {
                target: image
                source: "qrc:/images/images/black.png"
            }

            PropertyChanges {
                target: image1
                source: "qrc:/images/images/red.png"
            }
        },
        State {
            name: "Page1State0"
        }
    ]
}

и вот так тоже(без Form.ui)

import QtQuick 2.4
import QtQuick.Controls 2.4


Item {
    id: element
    width: 400
    height: 600

    Button {
        id: page1Button0
        x: 66
        y: 172
        width: 128
        height: 128

        Image {
            id: image
            width: 130
            height: 130
            anchors.topMargin: 0
            anchors.leftMargin: 0
            anchors.rightMargin: 0
            anchors.bottomMargin: 0
            anchors.fill: parent
            source: "qrc:/images/images/close.png"
            fillMode: Image.Stretch
        }
        onClicked: page1Label2.text = "weg"


    }

    Button {
        id: page1Button1
        x: 251
        y: 172
        width: 130
        height: 130
        Image {
            id: image1
            width: 130
            height: 130
            anchors.rightMargin: 0
            anchors.bottomMargin: 0
            anchors.fill: parent
            source: "qrc:/images/images/close.png"
            fillMode: Image.Stretch
        }
        onClicked:  state = "Page1State1"

    }

    Button {
        id: page1ButtonMenu
        x: 150
        y: 479
        text: qsTr("МЕНЮ")
        font.pointSize: 18
        onClicked: loader.source = "Page0.qml"

    }

    Label {
        id: page1labe0
        x: 57
        y: 47
        width: 286
        height: 33
        text: qsTr("Выберете красный цвет")
        horizontalAlignment: Text.AlignHCenter
        font.pixelSize: 22
        font.family: "Verdana"
        font.weight: Font.Thin
    }

    Label {
        id: page1Label1
        x: 122
        y: 340
        width: 156
        height: 56
        text: qsTr("Побед: 0%")
        font.pointSize: 20
        horizontalAlignment: Text.AlignHCenter
    }

    Label {
        id: page1Label2
        x: 122
        y: 409
        width: 156
        height: 56
        text: qsTr("1 из 20")
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20
    }
    states: [
        State {
            name: "Page1State1"

            PropertyChanges {
                target: image
                source: "qrc:/images/images/red.png"
            }

            PropertyChanges {
                target: image1
                source: "qrc:/images/images/black.png"
            }
        },
        State {
            name: "Page1State2"

            PropertyChanges {
                target: image
                source: "qrc:/images/images/black.png"
            }

            PropertyChanges {
                target: image1
                source: "qrc:/images/images/red.png"
            }
        },
        State {
            name: "Page1State0"
        }
    ]
}

0

Забыл код вставить. При той задаче вот так заработало:

    property alias page1Label2: page1Label2

    Label {
        id: page1Label2
        x: 122
        y: 409
        width: 156
        height: 56
        text: qsTr("1 из 20")
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20        
    }

Но при попытке сделать тоже действие из Page0.qml получаю старую ошибку. Скажите пожалуйста, почему опять не видно этот лэйбел?

0

Забыл код вставить. При той задаче вот так заработало:

    property alias page1Label2: page1Label2

    Label {
        id: page1Label2
        x: 122
        y: 409
        width: 156
        height: 56
        text: qsTr("1 из 20")
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20        
    }

Но при попытке сделать тоже действие из Page0.qml получаю старую ошибку. Скажите пожалуйста, почему опять не видно этот лэйбел?

0

Попробовал так:

Page1.page1Label2.text = "111 из "

компилируется, но при переходе на страничку всегда появляется базовое значение это похоже тоже странная магическая часть QML

0

еще работает такой вариант page.lable.text="some text" (page - это страница где нужный лейбл, при обрщении с одной страницы на другую, но при этом они должны быть все загружены и активны(например если в одном окне показывает сразу несколько страниц))

п.с. скорее всего при смене страницы через лоадер, старая страница становится недоступной. поэтому ее и не видно.

0

но оно еще все обнуляет при смене через лодер. никак не пойму, пока, как с этим обнулением бороться

0

и еще беда, в form.ui.qml почему то нельзя брать информацию из класса из с++ слоя.

0

как вариант, можно загружать несколько страниц одним пакетом, напремер через TabView, где каждый Tab нужная страница из одной группы, и через алиасы передавть значения(тогда может отпасть необходимость в лоадере). или можно передавть нужные значения в слой С++, и при загрузке новой страницы в лоадере брать данные из этого слоя

0

поэтому мне проще без форм

0

хорошо придумано.

0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Last comments
June 24, 2019, 10:23 a.m.
Евгений Легоцкой

Хорошо, ну будут проблемы помимо того, что касается статей, то не стесняйтесь задавать вопросы на форуме.
МБ
June 24, 2019, 10:21 a.m.
Михаил Булатов

Извиняюсь, все работает(из-за невнимательности).
June 24, 2019, 9:52 a.m.
Евгений Легоцкой

Придётся делать ещё сигнал в дочернем qml и пробрасывать через коннекты и обработчики. А вообще нужно смотреть конкретный код и что вы пытаетесь сделать. Так что лучше будет, если вы зад...
June 21, 2019, 8:31 a.m.
Ruslan Polupan

Вот моя строка по которой все отлично сработало %cqtdeployer% -bin c:/CentralMposKeys/CentalMposKeys.exe -qmake c:/Qt/5.12.2/mingw73_64/bin/qmake.exe
June 21, 2019, 8:24 a.m.
Андрей Янкович

Возможно кому то пригодится сqtdeployer для windows работает точно так же как и для Linux разница лишь в команде запуска Linux: cqtdeployer Windows: %cqtdeployer...
Now discuss on the forum
June 24, 2019, 2:36 p.m.
Михаиллл

Нашел проект подключения к вебсокету.Но по моему адресу не могу подключиться.Нужно ли для этого использовать библиотеки?Вы не знаете адрес вебсокета, на котором можно проверить с...
June 24, 2019, 2:07 p.m.
Евгений Легоцкой

Я пока даже не знаю, а какой код самого подключения? использовали ожидание на подключение? Так делали? socket->connectToServer("market");if (socket->waitForConnected(1000)) ...
June 24, 2019, 1:19 p.m.
IscanderChe

// widget.cpp#include "widget.h"#include <QTableView>#include <QVBoxLayout>#include "checkboxdelegate.h"#include "comboboxdelegate.h"#include "mytableview.h"#include <QSqlD...
June 24, 2019, 11:16 a.m.
BlinCT

Хорошо, с этим понятно. Вот есть такой набор каких то кнопок. Цифры отображают в каком порядке должен менятся фокус.1. Как правильнее сделать отображение активного обьекта...
e
June 24, 2019, 10:58 a.m.
evgenm27

Спасибо за ответ, буду пробовать
Looking for a Job?
10,000.00 руб. - 15,000.00 руб.
Нужен помощник для создания API.
Moscow, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

EVILEG
About
Services
Join us
© EVILEG 2015-2019
Recommend hosting TIMEWEB