Fix Qt cleanup warning with proper worker lifecycle management
- Keep reference to active worker in dialog instance - Use deleteLater() for Signals QObject cleanup - Prevents "shared QObject deleted directly" warning 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
0041bc0fae
commit
fc728f27f7
|
|
@ -197,6 +197,7 @@ class RambleDialog(QDialog):
|
||||||
|
|
||||||
self.thread_pool = QThreadPool.globalInstance()
|
self.thread_pool = QThreadPool.globalInstance()
|
||||||
self.result: Optional[RambleResult] = None
|
self.result: Optional[RambleResult] = None
|
||||||
|
self._active_worker: Optional[GenWorker] = None # Keep reference to prevent premature GC
|
||||||
|
|
||||||
self.field_lock_boxes: Dict[str, QCheckBox] = {}
|
self.field_lock_boxes: Dict[str, QCheckBox] = {}
|
||||||
self.field_outputs: Dict[str, QTextEdit] = {}
|
self.field_outputs: Dict[str, QTextEdit] = {}
|
||||||
|
|
@ -373,10 +374,10 @@ class RambleDialog(QDialog):
|
||||||
}
|
}
|
||||||
|
|
||||||
self._set_busy(True, "Generating...")
|
self._set_busy(True, "Generating...")
|
||||||
worker = GenWorker(self.provider, payload)
|
self._active_worker = GenWorker(self.provider, payload)
|
||||||
worker.signals.finished.connect(self._on_generated)
|
self._active_worker.signals.finished.connect(self._on_generated)
|
||||||
worker.signals.error.connect(self._on_gen_error)
|
self._active_worker.signals.error.connect(self._on_gen_error)
|
||||||
self.thread_pool.start(worker)
|
self.thread_pool.start(self._active_worker)
|
||||||
|
|
||||||
def _on_generated(self, data: Dict[str, Any]):
|
def _on_generated(self, data: Dict[str, Any]):
|
||||||
new_fields: Dict[str, str] = data.get("fields", {})
|
new_fields: Dict[str, str] = data.get("fields", {})
|
||||||
|
|
@ -431,6 +432,10 @@ class RambleDialog(QDialog):
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
"""Wait for background workers to finish before closing."""
|
"""Wait for background workers to finish before closing."""
|
||||||
self.thread_pool.waitForDone(1000) # Wait up to 1 second
|
self.thread_pool.waitForDone(1000) # Wait up to 1 second
|
||||||
|
# Clean up worker reference to prevent Qt warning
|
||||||
|
if self._active_worker is not None:
|
||||||
|
self._active_worker.signals.deleteLater()
|
||||||
|
self._active_worker = None
|
||||||
super().closeEvent(event)
|
super().closeEvent(event)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue