Может ли элемент RowLayout иметь сигналы в QML? - PullRequest
0 голосов
/ 13 марта 2019

У меня небольшая проблема с некоторыми пользовательскими элементами, которые я использую в своем коде QML. Я создал набор Предметов, состоящий из RowLayout, содержащий метку и элемент управления вводом (например, SpinBox или ComboBox). Чтобы «вывести сигнал с измененным значением наружу», я добавил к внешнему RowLayout сигнал, который должен быть передан onValueChanged. Вот код:

import QtQuick 2.10
import QtQuick.Controls 2.2
import QtQuick.Window 2.2
import QtQuick.Controls.Material 2.3
import QtQuick.Layouts 1.0

RowLayout {
    property alias label: innerLabel.text
    property alias value: innerNum.value
    property alias editable: innerNum.editable
    property alias min: innerNum.from
    property alias max: innerNum.to
    property string myPage: ""
    property string myMeasure: ""
    property int fontSize: 16
    property bool signaling: true
    property var colorAccent: Material.accent
    property var colorPrimary: Material.primary
    signal fabValueChanged(var message)

    Label{
        id: innerLabel
        Layout.fillHeight: filling
        Layout.fillWidth: filling
        Material.foreground: colorAccent
        font.pixelSize: fontSize
        verticalAlignment: Text.AlignVCenter
        property bool filling: true
        onTextChanged: function(){
            if (text == ""){
                filling = false;
                width = 0;
            }
            else{
                filling = true;
            }
        }
    }

    SpinBox{
        id: innerNum
        Layout.fillHeight: true
        Layout.fillWidth: true
        Material.foreground: colorAccent
        editable: true
        to: 100000
        from: 1
        value: 1
        onValueChanged: function(){
            if(parent.signaling){
                var toSend = {"name":parent.objectName,"value":value,"measure":parent.myMeasure};
                fabValueChanged(toSend);
            }
        }
    }
}

Когда я подключаю fabValueChanged к простому слоту, который просто печатает сообщение, я ничего не получил, даже если сигнал onValueChanged правильно излучается. Может ли быть так, что RowLayout не может излучать сигналы? Если это так, как я могу изменить свой объект, чтобы избежать этой проблемы? Если моя проблема не в макете, что происходит?

1 Ответ

0 голосов
/ 13 марта 2019

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

Снова извините

...