4 апреля 2019 г. 10:44

Как в 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 не определен.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
SZ
24 июня 2019 г. 17:49
Serg Zhi

C++ - Тест 003. Условия и циклы

  • Результат:78баллов,
  • Очки рейтинга2
АС
24 июня 2019 г. 8:03
Александр Спиридонов

C++ - Тест 001. Первая программа и типы данных

  • Результат:53баллов,
  • Очки рейтинга-4
БА
23 июня 2019 г. 13:52
Борис Артамонов

C++ - Тест 003. Условия и циклы

  • Результат:35баллов,
  • Очки рейтинга-10
Последние комментарии
24 июня 2019 г. 10:23
Евгений Легоцкой

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

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

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

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

Возможно кому то пригодится сqtdeployer для windows работает точно так же как и для Linux разница лишь в команде запуска Linux: cqtdeployer Windows: %cqtdeployer...
Сейчас обсуждают на форуме
24 июня 2019 г. 14:36
Михаиллл

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

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

// widget.cpp#include "widget.h"#include <QTableView>#include <QVBoxLayout>#include "checkboxdelegate.h"#include "comboboxdelegate.h"#include "mytableview.h"#include <QSqlD...
24 июня 2019 г. 11:16
BlinCT

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

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

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

EVILEG
О нас
Услуги
Присоединяйтесь к нам
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB