ฉันกำลังทำงานอยู่บน QML โครงการ ในส่วนติดต่อผู้ใช้ของฉันกำลังทำอยู่ฉันต้องการให้ทั้งสองปรับปรุงแถบเลื่อนอกจาก C++และอ่านค่าปัจจุบันใน C++จาก QML. คุณสมบัติเหมือนจะถูกทางออกหรอกนะ ตอนนี้ฉันอ่านแตกต่างคำถามขึ้นแล้วโดยไม่มีความสำเร็จ งสองทางเชื่อม C++แบบใน QML, เปลี่ยนคุณสมบัติของไม่กระตุ้นสัญญาณ,etc...อยู่ในปัจจุบันรหัสฉันประกาศให้เป็นทรัพย์สินของฉันอยู่ในชั้นเรียนภาษา C++language
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;
...
}
และเปิดเผยมันให้ Qt ผ่านทาง singleton
qmlRegisterSingletonInstance("com.me.test", 1, 0, "MyClass", &myClass);
งั้นถูกผูกไว้ที่ C++ทรัพย์สินที่จะเป็น QML ดบอกระดับบนแถบเลื่อน
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
}*/
}
}
ถูกเชื่อมโยงดูเหมือนไปทำงานแล้ว ฉันสามารถแก้ไขค่าของ myValue
งั้นก็ส่งเสี myValueChanged
เพื่อให้ QML ปรับปรุงมันเป็นแถบเลื่อน. แต่ได้รับมัน myClass.myValue
คือ bounded ต้อง slider.value
. ฉันคิดว่ากค่าทั้งคู่จะปรับปรุงในเวลาเดียวกัน แต่ลากรดบอกระดับบนแถบเลื่อนแสดงว่าพวกเขาต้องแตกต่างค่า. ต่อไปนี้มันคืออะไรพิมพ์ออกในคอนโซลตอนที่ฉันลากของแถบเลื่อน.
qml: value = 19.863013698630137
qml: myClass.myValue = 30
ยิ่งไปกว่านั้น setMyValue
ดูเหมือนจะไม่ถูกเรียกเว้นแต่เป็น explicit การบ้านทำเหมือน myClass.myValue = 0
. ฉันยังพยายามที่เชื่อมส่วนประกอบไม่เคยประสบความสำเร็จ แล้วทำไมนี่ถึงเป็นเรื่องคดีและฉันทำให้ C++ทรัพย์สินปรับปรุงเมื่อไหร่ก็ตามที่ฉันลากไปวิ่งสไลด์อยู่รึเปล่า?
Qt:6.2.1
คอมไพเลอร์:clang/gcc
ระบบปฏิบัติการ:หน้าต่าง/ระบบลินุกซ์
ปรับปรุง:ทดสอบกลับเชื่อม. ยังคงการพิมพ์เดียวกับผลลัพธ์
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
จะถูกปรับปรุงและจะยิงมันmyValueChanged
?