Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
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
AA
April 17, 2019, 7:40 p.m.
Anton Ablin

Qt - Test 001. Signals and slots

  • Result:73points,
  • Rating points1
E
April 17, 2019, 6:16 p.m.
Evgeny

Qt - Test 001. Signals and slots

  • Result:100points,
  • Rating points10
E
April 17, 2019, 6:14 p.m.
Evgeny

Qt - Test 001. Signals and slots

  • Result:78points,
  • Rating points2
Last comments
U
April 18, 2019, 3:37 p.m.
Unreal_man

А как иконку в хедер задать?
u
April 18, 2019, 2:15 a.m.
uaa

доброго времени,большое спасибо за пример для начинающего)при адаптации к своему проекту столкнулся с таким ньансом:в vepolyline.h в 47 строке нужна инициализация по умолчанию: int m_pointF...
E
April 11, 2019, 12:49 p.m.
Evgeny

Спасибо за ответ) У меня компоновщик на нее ругался просто. Оказалось, просто забыл Q_OBJECT в начале класса указать.
April 11, 2019, 12:29 p.m.
Евгений Легоцкой

Добрый день. Вы имели ввиду реализацию? Для сигналов в Qt реализация не пишется, это всё генерируется в moc файлах под капотом Qt.
E
April 11, 2019, 12:15 p.m.
Evgeny

Здравствуйте. А где описание функции signal1()?
Now discuss on the forum
R
April 19, 2019, 9:55 a.m.
RED_Spider

мені важко це зараз навіть перевірити, тому що знайшов коміт, це ще було в 2016 році, і цей код не буде працювати коректно зараз, єдине скажу що це були QThread
i
April 17, 2019, 3:03 p.m.
ilya.guzikov

BlinCT, на стороне ++ это делать необходимо так как в qml при использовании функции append происходит перерисовка всех точек лини(как я понимаю) и из-за этого при использовании больших массиво...
April 10, 2019, 11:20 a.m.
Алексей Внуков

может тоже кому надо будет - QML не принимает QVector<QVector<int>> , при попытке вывести полученый вектор QML показывает что это QVariant(QVector<QVector<int> ...
SN
April 10, 2019, 9:36 a.m.
Stanislav Nykytiuk

Как реализовать такое меню, что бы нажмаешь меню подменю и выбор позиции? Данные меню и подменю в базе SQL.
Join us in social networks

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