У меня небольшая проблема с некоторыми пользовательскими элементами, которые я использую в своем коде 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 не может излучать сигналы? Если это так, как я могу изменить свой объект, чтобы избежать этой проблемы?
Если моя проблема не в макете, что происходит?