Eu estou trabalhando em um projeto de software livre. Na INTERFACE do usuário que eu estou trabalhando, eu preciso tanto de atualização do controle deslizante de C++ e ler o valor atual em C++ do software livre. Propriedades parece ser a solução certa. Até agora tenho lido diversas questões sobre ISSO, sem sucesso, Duas vias de ligação C++ modelo de software livre, Propriedades Alteradas não o sinal de trigger, etc... Na minha atual código declarei uma propriedade na minha classe de C++
class MyClass : public QObject {
Q_OBJECT
public:
MyClass(QObject*);
Q_PROPERTY(double myValue READ getMyValue WRITE setMyValue NOTIFY myValueChanged)
void setMyValue(double n) {
std::cerr << "myValue being update: " << n << "\n";
myValue = n;
}
double myValue = 30;
...
}
E expostas em Qt através de um singleton
qmlRegisterSingletonInstance("com.me.test", 1, 0, "MyClass", &myClass);
Em seguida, atou o C++ propriedade de um controle deslizante de software livre
import com.me.test
ApplicationWindow {
Slider {
id: slider
height: 30
width: 100
from: 0
to: 100
value: myClass.myValue
onValueChanged {
console.log("value = " + value)
console.log("myClass.myValue = " + myClass.myValue)
}
/* Doesn't help
Binding {
target: slider
property: "value"
value: myClass.myValue
}*/
}
}
A ligação parece funcionar. Eu posso modificar o valor de myValue
em seguida, emitem myValueChanged
para fazer a atualização de software livre é deslizante. Mas, dado que myClass.myValue
é delimitada a slider.value
. Eu assumir ambos os valores é atualizado ao mesmo tempo. Mas arrastando o controle deslizante mostra que eles têm valores diferentes. O seguinte é o que é impressa no console quando eu arrasto o meu controle.
qml: value = 19.863013698630137
qml: myClass.myValue = 30
Além disso setMyValue
parece não ser chamado, a menos que uma atribuição explícita é feita como myClass.myValue = 0
. Eu também tentei o componente de Vinculação, sem sucesso. Por que esse é o caso e eu poderia fazer o C++ propriedade atualizada sempre que eu arraste o controle deslizante?
Qt: 6.2.1
Compilador: clang/gcc
Sistema operacional: Windows/Linux
Atualização: testado um enlace reverso. Ainda imprimir o mesmo resultado
import com.me.test
ApplicationWindow {
Slider {
id: slider
height: 30
width: 100
from: 0
to: 100
value: myClass.myValue
onValueChanged {
console.log("value = " + value)
console.log("myClass.myValue = " + myClass.myValue)
}
Binding {
target: myClass
property: "myValue"
value: slider.value
}
}
}
myClass.myValue
vai ser atualizado e vai disparar a suamyValueChanged
?