Pracujem na POŽIADAVKY projektu. V UI som pracoval na, potrebujem na oboch aktualizácia jazdca z C++ a prečítajte si aktuálnu hodnotu do C++ PROGRAM. Vlastnosti zdá byť to pravé riešenie. Zatiaľ som čítal rôzne otázky, TAK bez úspechu Dve spôsobom záväzné C++ model PROGRAM, Zmeniť Vlastnosti nie spúšťací signál, atď... V mojom aktuálny kód som vyhlásil majetku v mojom C++ trieda
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;
...
}
A vystavené do Qt cez singleton
qmlRegisterSingletonInstance("com.me.test", 1, 0, "MyClass", &myClass);
Potom viazaný C++ majetku na POŽIADAVKY jazdca
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
}*/
}
}
Záväzné sa zdá, že funguje. Môžem zmeniť hodnotu z myValue
potom vyžarujú myValueChanged
ak chcete, aby PROGRAM aktualizácia je to jazdec. Ale vzhľadom na to, že myClass.myValue
je ohraničená na slider.value
. Ja by som predpokladať, ako hodnoty dostane aktualizované v rovnakom čase. Ale ťahaním jazdca ukazuje, že majú rôzne hodnoty. Nasledujúce to, čo je vytlačené v konzole, keď som sa presuňte moje jazdca.
qml: value = 19.863013698630137
qml: myClass.myValue = 30
Ďalej setMyValue
zdá sa, nie je s názvom, ak explicitné priradenie sa vykonáva ako myClass.myValue = 0
. Tiež som sa snažil Záväzné komponent bez úspechu. Prečo je to tak a čo by som mohol urobiť C++ majetku aktualizovať vždy, keď som sa presuňte jazdca?
Qt: 6.2.1
Zostavovateľ: rinčanie/gcc
OS: Windows/Linux
Aktualizácia: testované reverzné záväzné. Stále tlač rovnaký výsledok
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
budú aktualizované a bude oheň jehomyValueChanged
?