Lucrez la un QML proiect. În UI lucrez, am nevoie de atât de actualizare slider din C++ și citește valoarea curentă în C++ de la QML. Proprietăți pare a fi soluția potrivită. Până acum am citit diferite întrebări pe ATÂT de fără succes Două mod obligatoriu C++ model în QML, Schimbat Proprietăți nu declanșa semnalul, etc... În actualul cod în care am declarat-o proprietate în C++ clasa
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;
...
}
Și expuse în Qt printr-un singleton
qmlRegisterSingletonInstance("com.me.test", 1, 0, "MyClass", &myClass);
Apoi legat de C++ de proprietate de la un QML slider
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
}*/
}
}
Legarea pare să funcționeze. Nu pot modifica valoarea myValue
apoi emit myValueChanged
pentru a face QML actualizare slider. Dar având în vedere că myClass.myValue
este delimitată de slider.value
. Aș presupune că ambele valori se actualizează în același timp. Dar glisarea cursorului arată că acestea au valori diferite. Următoarele este ceea ce este imprimat în consola cand mi târăsc slider.
qml: value = 19.863013698630137
qml: myClass.myValue = 30
În plus setMyValue
pare să nu fie numit, cu excepția cazului în mod explicit atribuirea se face ca myClass.myValue = 0
. Am încercat, de asemenea, Obligatoriu componentă fără succes. De ce este acest caz și am putut să fac C++ proprietate actualizat ori de câte ori mă trageți cursorul?
Qt: 6.2.1
Compilator: zăngănit/gcc
Sistem de OPERARE: Windows/Linux
Update: testat un revers obligatorii. Încă de imprimare același rezultat
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
va fi actualizat și va focmyValueChanged
?