Metode QTimer timeout() tidak lagi diaktifkan setelah restrukturisasi kode

Saya baru-baru ini memformat ulang beberapa kode saya agar lebih mudah dibaca. Saya memiliki kode di kelas MainWindow untuk menangani peristiwa sentuh. Di antara fungsi-fungsi ini adalah fungsi pinchZoom, yang berfungsi sebelum perubahan saya. Saya memindahkan kode ke kelas tunggal yang merupakan QObject.

Ketika pinchZoom terdeteksi, widget yang relevan (ditemukan oleh QApplication::widgetAt()) memanggil metode pinchZoom(), yang menghentikan dan memulai ulang QTimer single-shot. Metode timeout() QTimer terhubung ke slot yang melakukan pembesaran dan pembaruan tampilan sebenarnya. Ini agar saya dapat menambahkan penundaan antara gerakan mencubit-zoom yang sebenarnya dan pembaruan tampilan.

Sebelum memindahkan kode saya, sinyal timeout() ini berfungsi dengan baik dan metode zoom dipicu. Namun, meskipun tidak menyentuh koneksi sinyal/slot, slot zoom yang dipicu oleh metode timeout() tidak lagi dipanggil. Koneksi sebenarnya antara sinyal timeout() dan slot dilakukan di konstruktor widget tempat pengatur waktu berada.

Saya sudah cek, dan sinyal/slot koneksi kembali true, jadi koneksi ADA.

Apakah ada alasan mengapa hal ini bisa terjadi? Apakah ini ada hubungannya dengan fakta bahwa QTimer yang sedang dimulai sekarang terjadi dalam kelas tunggal, bukan di kelas MainWindow?


person Darin Beaudreau    schedule 01.08.2019    source sumber


Jawaban (1)


Tampaknya masalahnya adalah kelas tunggal saya berada di thread terpisah, dan QTimer tidak dapat dipicu dari thread terpisah. Saya baru saja menyiapkan slot di kelas MainWindow asli untuk menerima sinyal dari kelas singleton untuk kemudian memanggil metode pinch zoom. Berfungsi dengan baik sekarang.

person Darin Beaudreau    schedule 01.08.2019