ฉันเพิ่งฟอร์แมตโค้ดบางส่วนใหม่เพื่อให้อ่านง่ายขึ้น ฉันมีโค้ดในคลาส MainWindow ของฉันเพื่อจัดการกับเหตุการณ์การสัมผัส ในบรรดาฟังก์ชันเหล่านี้คือฟังก์ชัน pinchZoom ซึ่งทำงานก่อนการเปลี่ยนแปลงของฉัน ฉันย้ายโค้ดไปที่คลาสซิงเกิลตันซึ่งเป็น QObject แทน
เมื่อตรวจพบ pinchZoom วิดเจ็ตที่เกี่ยวข้อง (พบโดย QApplication::widgetAt()) จะเรียกใช้เมธอด pinchZoom() ซึ่งจะหยุดแล้วรีสตาร์ท QTimer แบบช็อตเดียว เมธอด timeout()
ของ QTimer เชื่อมต่อกับสล็อตซึ่งจะทำการซูมจริงและอัปเดตมุมมอง นี่เป็นสิ่งที่ฉันสามารถเพิ่มความล่าช้าระหว่างท่าทางการบีบนิ้วจริงและการอัปเดตมุมมอง
ก่อนที่จะย้ายโค้ดของฉัน สัญญาณ timeout()
นี้ทำงานได้ดี และวิธีการซูมก็เริ่มทำงาน อย่างไรก็ตาม แม้ว่าจะไม่ได้สัมผัสกับการเชื่อมต่อสัญญาณ/สล็อต ช่องการซูมที่ถูกทริกเกอร์โดยวิธี timeout()
จะไม่ถูกเรียกอีกต่อไป การเชื่อมต่อจริงระหว่างสัญญาณ timeout()
และสล็อตเสร็จสิ้นในตัวสร้างของวิดเจ็ตที่มีตัวจับเวลาอยู่
ฉันได้ตรวจสอบแล้ว และการเชื่อมต่อสัญญาณ/สล็อตกลับมาเป็นจริง ดังนั้นจึงมีการเชื่อมต่ออยู่
มีเหตุผลบางอย่างที่สิ่งนี้จะเกิดขึ้นหรือไม่? มันเกี่ยวข้องกับความจริงที่ว่า QTimer ที่กำลังเริ่มต้นกำลังเกิดขึ้นภายในคลาสซิงเกิลตันแทนที่จะเป็นคลาส MainWindow หรือไม่?